美文网首页Springboot
Springboot Filter顺序配置

Springboot Filter顺序配置

作者: V哥带你写程序 | 来源:发表于2019-06-03 23:49 被阅读0次

两种配置方法

第一种

1.在Filter类上加@WebFilter;

  1. Springboot入口Class上加@ServletComponentScan(basePackages = {"filter所在包名"})
    多个Filter都这样配置,只要这些Filter之间没有先后依赖关系。
    我这里刚好有两个Filter有先后顺序要求,看到除了@WebFilter注解还有@Order这个注解。
    Springboot官方文档没有细说这个Order注解。经测试程序在本地是好的,部署到远程顺序就不能保证了。没有深纠是什么原因,知道还有第二种配置方法。

第二种方式

这种配置能保证Filter的执行先后顺序
在启动类添加FilterRegistrationBean,如下

@SpringBootApplication
public class DovApplication {

    public static void main(String[] args) {
        SpringApplication.run(DovApplication.class, args);
    }

    //第一个Filter注册
    ...

    @Bean
    public FilterRegistrationBean<RequireLoginFilter> registerLoginCheckFilter(RequireLoginFilter requireLoginFilter) {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(requireLoginFilter);
        registrationBean.addUrlPatterns("/*");
        registrationBean.setName("loginCheckFilter");
        registrationBean.setOrder(2);
        return registrationBean;
    }
}
@Component
public class RequireLoginFilter extends OncePerRequestFilter {

    private static List<String> loginNotRequiredUrls = new ArrayList<>();

    static {
        loginNotRequiredUrls.add("/images/**");
        loginNotRequiredUrls.add("/");
        loginNotRequiredUrls.add("/login");
    }

    @Autowired
    private SessionCache sessionCache;

    private PathMatcher pathMatcher = new AntPathMatcher();
    ... //省略

RequireLoginFilter用普通的@Component标记,它本身用到的依赖autowire进去即可。
经测试第二种配置Filter的Order是能保证的,order值越小,Filter越早经过。

相关文章

网友评论

    本文标题:Springboot Filter顺序配置

    本文链接:https://www.haomeiwen.com/subject/vulkxctx.html