JavaWeb 之 Filter 验证用户登录案例

需求:

1、 访问一个网站的资源。验证其是否登录
2、 如果登录了,则直接放行。
3、 如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。

代码实现:

 1 import javax.servlet.*;
 2 import javax.servlet.annotation.WebFilter;
 3 import javax.servlet.http.HttpServletRequest;
 4 import java.io.IOException;
 5 
 6 @WebFilter("/*") // 拦截所有的访问
 7 public class LoginFilter implements Filter {
 8     public void destroy() {
 9     }
10 
11     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
12         // 强转为HttpServletRequest 对象
13 
14         HttpServletRequest request = (HttpServletRequest) req;
15         // 1 .获取资源请求路径
16         String uri = request.getRequestURI();
17 
18         // 2 判断是否包含登录相关资源路径
19         // login.jsp,要排除图片,验证码等资源
20         if(uri.contains("/login.jsp") || uri.contains("/loginServlet") || uri.contains("/css/") || uri.contains("/js/") || uri.contains("/fonts/") || uri.contains("/checkCodeServlet")) {
21             // 包含,用户想登录,放行与登录相关的资源
22             chain.doFilter(req, resp);
23         } else {
24             // 不包含,验证用户是否登录
25             // 3 从session 中获取 user
26             Object user = request.getSession().getAttribute("user");
27 
28             if(user != null) {
29                 // 登录成功,放行
30                 chain.doFilter(req,resp);
31             } else {
32                 request.setAttribute("login_msg","尚未登录,请登录");
33                 request.getRequestDispatcher("/login.jsp").forward(request,resp);
34             }
35         }
36 
37 
38     }
39 
40     public void init(FilterConfig config) throws ServletException {
41 
42     }
43 
44 }

猜你喜欢

转载自www.cnblogs.com/niujifei/p/11628048.html