在SpringBoot中使用过滤器
1.实现Filter
接口
可以重写Filter中的三个方法
name |
说明 |
init(FilterConfig) |
创建filter时会调用一次 |
doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) |
拦截客户端请求时调用 |
destroy() |
销毁filter时会调用一次 |
2.注册拦截器
方式1: 注解注册
通过@WebFilter(filterName, urlPatterns)
注解来说明这是一个过滤器
参数 |
说明 |
filterName |
过滤器名字 |
urlPatterns |
拦截的路径 |
然后在主启动类上使用@ServletComponentScan
注解开启扫描
加上这个注解可以扫描@Servlet
、@Filter
、@Listener
方式2: 配置类方式注入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Configuration public class FilterConfig { @Autowired private Filter1 filter;
@Bean public FilterRegistrationBean filter() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(filter); registration.setName("filter"); registration.addUrlPatterns("/*"); registration.setOrder(1); return registration; } }
|
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| @WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*") public class LoginCheckFilter implements Filter { public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestURI = request.getRequestURI();
String[] urls = new String[]{ "/employee/login", "/employee/logout", "/backend/**", "/front/**", "/common/**" }; if (check(urls, requestURI)) { filterChain.doFilter(request, response); return; } else if (request.getSession().getAttribute("employee") != null) { Long id = (Long) request.getSession().getAttribute("employee"); BaseContext.setCurrentId(id); filterChain.doFilter(request, response); return; } else { response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN"))); return; } }
private boolean check(String[] urls, String requestURI) { for (String url : urls) { if (PATH_MATCHER.match(url, requestURI)) { return true; } } return false; } }
|