使用过滤器来限制JSP访问?

时间:2011-07-22 14:59:05

标签: ajax jsp url servlets servlet-filters

我使用来自JSP的javascript调用来使用AJAX调用和服务器端请求的原型框架进行登录,我设置了一个过滤器来拦截所有请求,以便我可以重定向到登录页面或继续。

我遇到的问题是,如果你在浏览器中输入URL的路径转到另一个页面,那么在页面加载之前没有办法过滤这个,因为它不是一个AJAX请求,在某些情况下还没有HTTPWebRequest,直到在页面上按下按钮..

处理此问题的最佳方法是什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

据我所知,您没有使用Java EE提供的容器管理身份验证。在正确配置时,它会自动考虑到这一点。

使用自行开发的身份验证系统,通常的做法是将登录用户作为属性放在会话范围中,以便代码的剩余部分可以拦截,servlet filters

假设您的登录方法如下所示:

User user = userService.find(username, password);

if (user != null) {
    request.getSession().setAttribute("user", user);
}

// ...

然后您可以在过滤器中执行以下操作:

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;
    HttpSession session = request.getSession(false);

    if (session == null || session.getAttribute("user") == null) {
        response.sendRedirect("login.jsp"); // No logged-in user found, so redirect to login page.
    } else {
        chain.doFilter(req, res); // Logged-in user found, so just continue request.
    }
}

将此过滤器映射到覆盖受保护页面的URL模式,例如: /app/*或其他。