java - 过滤器未检索 request.getAttribute()

标签 java servlets servlet-filters

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 请求/响应的工作原理感到困惑?当关联的响应完成时,请求将完成/被垃圾处理,包括所有属性。每个后续请求都是一个全新的请求,不包含与前一个请求相同的属性。

您真的不想使用 session 范围吗?登录时执行以下操作:

request.getSession().setAttribute("user", user);

然后在身份验证过滤器中添加以下内容:

if (((HttpServletRequest).getSession().getAttribute("user") != null) {
    chain.doFilter(request, response); // Continue.
} else {
    ((HttpServletResponse) response).sendRedirect("login"); // Redirect to login.
}

另请参阅:

关于java - 过滤器未检索 request.getAttribute(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051927/

相关文章:

Java - 如何将 Scala Stream 转换为 Java Stream?

java - 如何使用jsp生成唯一字符串?

java - 如何通过 URL base 拦截请求?

java - ListIterator previous() 和 next() 结果

java - HashMap 中的 LinkedList 搜索性能

java - 简化与数组的比较

java - 从servlet发送数据到jsp

java - 我可以在 Tomcat 7 中编写具有异步处理功能的聊天应用程序吗?

java - 将信息从 servlet 发送回 Filter

java - 在过滤器中重定向时停止进一步处理