1、生成过滤器类并实现 Filtor借口
2、定义方形请求
@WebFilter(urlPatterns = "/*")//注解——过滤所有请求 public class MyFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //设置放行请求——以用户登陆为例,放行登陆验证以及静态资源 final String[] notFilterUrl = {"tolog", "login", "js", "css", "images", "fonts"};
3、启动类开启扫面注解
@ServletComponentScan//扫描注解 @SpringBootApplication @MapperScan("com.example.super_manager.dao") public class SuperManagerApplication { public static void main(String[] args) { SpringApplication.run(SuperManagerApplication.class, args); }
3、过滤器对请求的验证处理
//过滤器过滤判断 if (!(servletRequest instanceof HttpServletRequest)&& !(servletResponse instanceof HttpServletResponse)){ throw new ServletException("仅支持HTTP请求"); } HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //获得请求路径uri /* request.getRequestURL() 返回全路径 http://localhost:8080/bzbs/system/login.jsp request.getRequestURI() 返回除去host(域名或者ip)部分的路径 /bzbs/system/login.jsp request.getContextPath() 返回工程名部分,如果工程映射为/,此处返回则为空 /bzbs request.getServletPath() 返回除去host和工程名部分的路径 /system/login.jsp * */ String uri = request.getRequestURI(); //乱码处理 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("utf-8"); boolean notFilter = false; //遍历不拦截列表并查找是否存在指定值 for (String str : notFilterUrl) { if (uri.contains(str)) {//验证是否有指定值 notFilter = true; break; } } //System.out.println("过滤器工作"); HttpSession session = request.getSession(); Object user = session.getAttribute("userLog"); //System.out.println(user+"#############"); if (user==null && !notFilter){ response.sendRedirect("tolog"); return ; }
4、调用下一个过滤器或资源
filterChain.doFilter(request,response);//调用下一个过滤器或web资源