我使用来自JSP的javascript调用来使用AJAX调用和服务器端请求的原型框架进行登录,我设置了一个过滤器来拦截所有请求,以便我可以重定向到登录页面或继续。
我遇到的问题是,如果你在浏览器中输入URL的路径转到另一个页面,那么在页面加载之前没有办法过滤这个,因为它不是一个AJAX请求,在某些情况下还没有HTTPWebRequest,直到在页面上按下按钮..
处理此问题的最佳方法是什么?
谢谢!
答案 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/*
或其他。