zoukankan      html  css  js  c++  java
  • 如何在SpringBoot的 过滤器之中注入Bean对象

    我建立一个全局拦截器,此拦截器主要用于拦截APP用户登录和请求API时候,必须加密,我把它命名为SecurityFilter,它继承了Filter,web应用启动的顺序是:listener->filter->servlet,

    而因为项目应用了SpringBoot,所以我们项目启动时,先初始化listener,因此注解的bean会被初始化和注入;然后再来就filter的初始化,再接着才到我们的dispathServlet的初始化,因此,当我们需要在filter里注入一个注解的bean时,就会注入失败,因为filter初始化时,注解的bean还没初始化,没法注入。

    那么,解决方法如下:

        @Bean
        public FilterRegistrationBean securityFilterRegistration() {
                FilterRegistrationBean registration = new FilterRegistrationBean();        
            DelegatingFilterProxy httpBasicFilter = new DelegatingFilterProxy();
            registration.setFilter(httpBasicFilter);
            Map<String,String> m = new HashMap<String,String>();
            m.put("targetBeanName","securityFilter");
            m.put("targetFilterLifecycle","true");
            registration.setInitParameters(m);           
            registration.addUrlPatterns("/appapi/*");
         
            registration.setOrder(2);
            return registration;
        }

    这样你就可以在securityFilter 里面添加@Autowired下的bean了。

        @Autowired
        private PermissionUserService userService;

    以上事项方式会全局过滤,此过滤不起作用适合于全局过滤(/*);

    registration.addUrlPatterns("/appapi/*");

    建议使用如下方式

        @Bean
        public FilterRegistrationBean securityFilterRegistration() {
                FilterRegistrationBean registrationBean = new FilterRegistrationBean();
                registrationBean.setFilter(securityFilterBean());
                registrationBean.addUrlPatterns("/appapi/*");
                registrationBean.setName("securityFilter");
                registrationBean.setOrder(2);
                return registrationBean;
            }
            
        @Bean
        public Filter securityFilterBean() {
         return new SecurityFilter();
        }

    参考文章:

    https://blog.csdn.net/xiaoyi52/article/details/76686001

    https://blog.csdn.net/cutterwolf/article/details/77849158

    https://blog.csdn.net/u013076044/article/details/72903130

    https://blog.csdn.net/angel708884645/article/details/51148865

    如何在servlet取得spring beans (autowired)

    https://blog.csdn.net/axzywan/article/details/8056892

    非spring组件servlet、filter、interceptor中注入spring bean

    https://www.cnblogs.com/duanxz/p/5463230.html
    ---------------------
    版权声明:本文为CSDN博主「蜀山雪松」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/jianxia801/article/details/79807917

  • 相关阅读:
    Samba.conf案例 Ubuntu
    samba服務器下文件夾chmod權限技巧
    华为AR1220
    vsftpd.conf案例
    FTP指令说明
    Ubuntu 16.04 LTS 搭建LAMP
    记录踩过的坑——代理IP
    重写验证时重定向
    顶级页面
    文件中用WriteLine追加内容的两种方法
  • 原文地址:https://www.cnblogs.com/zjm-1/p/11359062.html
Copyright © 2011-2022 走看看