登录验证案例
* 需求
1. 访问UserCRUD_case案例的资源,验证其是否登录
2. 若登录了,则直接放行
3. 若未登录,则跳转到登陆界面,提示您尚未登录,请先登录
* 分析
* 如何判断用户是否登录呢?
* 在UserCRUD_case案例中,我们在编写用户登录LoginServlet时,登陆成功后进行了以下操作:
UserService service = new UserServiceImpl();
User loginUser = service.login(user);
if (loginUser != null){
System.out.println("登陆成功");
session.setAttribute("user", loginUser);
response.sendRedirect(request.getContextPath()+"/index.jsp");
}else{
- 据此我们可以知道,若登陆成功,则在session中会存在一个名为user的数据,所以我们可以通过查看session中是否存在user即可知道是否登录;所以此登陆验证便可以这样实现:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String uri = request.getRequestURI();
if (uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/checkCodeServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fonts")){
chain.doFilter(req, resp);
}else{
Object user = request.getSession().getAttribute("user");
if (user != null){
chain.doFilter(req, resp);
}else{
request.setAttribute("login_error", "您尚未登录,请先登录!");
request.getRequestDispatcher("/login.jsp").forward(request, resp);
}
}
}
- 注意
我们在过滤资源时,并非要过滤登录相关的资源,而登录相关资源除了login.jsp;LoginServlet;验证码,还有css,js样式;这些资源也一定不要拦截