需求:
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 }