SpringBoot 过滤器 Filter使用实例详解
作者:后端Q
简介
过滤器是AOP(面向切面编程)思想的具体实现。可以过滤浏览器发出的请求,并且决定放行请求还是中断请求。
在浏览器对服务器发起请求或者服务器对浏览器响应,都会经过过滤器。
基于过滤器的机制,我们可以在过滤器中对请求和响应做一些处理,可以在过滤器中决定是否放行,例如:校验请求中有没有敏感字符串,校验有没有Session,实现URL级别的权限控制、压缩响应信息、编码格式等。
用法
在spring的应用中我们存在两种过滤的用法,一种是拦截器、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在springmvc中的用法基本上一样,只是配置上面有点区别。
功能
filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开 servlet时处理response.换种说法,filter其实是一个”servlet chaining”(servlet 链).
Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。
实现
Filter的执行由Servlet容器回调完成,因此我们不需要再额外引包。
新建MyFilter类
@Slf4j @Order(1) @WebFilter(filterName = "myFilter", urlPatterns = {"/user/*"}) public class MyFilter implements Filter { @Autowired private SysUserService sysUserService; @Override public void init(FilterConfig filterConfig) throws ServletException { log.info("过滤器初始化"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { log.info("请求处理"); HttpServletResponse response = (HttpServletResponse) servletResponse; HttpServletRequest request = (HttpServletRequest) servletRequest; log.info("MyFilter, URL:{}", request.getRequestURI()); if (request.getRequestURI().contains("login")) { filterChain.doFilter(servletRequest, servletResponse); } else { log.info("非法URL:{}", request.getRequestURI()); response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); PrintWriter writer = response.getWriter(); writer.print("no access"); } } @Override public void destroy() { log.info("过滤器销毁"); } }
用@WebFilter注解,指定拦截路径以及一些参数,同时需要在启动类使用@ServletComponentScan扫描带@WebFilter、@WebServlet、@WebListener并将帮我们注入bean
@ServletComponentScan @SpringBootApplication public class DevRootApplication { public static void main(String[] args) { SpringApplication.run(DevRootApplication.class, args); } }
当有多个过滤器之后,就需要规定各个过滤器的指定顺序了。
使用@Order()注解
以上就是SpringBoot 过滤器 Filter使用实例详解的详细内容,更多关于SpringBoot Filter过滤器的资料请关注脚本之家其它相关文章!