public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
try {
String logged = (String) ((HttpServletRequest) request).getAttribute("loginstatus");
if(logged != null) {
out.print("ok");
} else {
out.print("not ok");
}
为什么
logged
的值总是null
? 最佳答案
默认情况下,过滤器是在HTTP请求上执行的第一件事。请求属性通常由服务器端代码管理。谁/应该在此过滤器工作之前设置请求属性?
您不会混淆HTTP请求/响应的工作方式吗?当相关的响应完成时,请求完成/打包,包括所有属性。每个后续请求都是一个全新的请求,该请求完全不包含与先前请求相同的属性。
您实际上不是要使用会话范围吗?登录时执行以下操作:
request.getSession().setAttribute("user", user);
然后在身份验证筛选器中执行以下操作:
if (((HttpServletRequest).getSession().getAttribute("user") != null) {
chain.doFilter(request, response); // Continue.
} else {
((HttpServletResponse) response).sendRedirect("login"); // Redirect to login.
}
也可以看看:
How does a servlet environment work? ServletContext, HttpSession, HttpServletRequest/Response.
Servlet filters wiki page