zoukankan      html  css  js  c++  java
  • springboot Filter中无法注入Bean对象的解决办法


    这次在项目中编写Token代码逻辑的时候,遇到了一个空指针问题,经过排查发现,Filter里面无法利用@Autowired。
    所以此次文章用来解决这一问题。

    经过查阅资料发现,spring容器初始化Bean的顺序是Listener->Filter->servlet.
    那么我可以在Listener里面预先加载我们想要的Bean对象,然后经过Filter构造函数将对象传进去。

    下面是具体的代码:

    这个是启动监听器。

    @Slf4j
    @Configuration
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public class StartLinster implements ApplicationListener<ApplicationEvent> {
    
        @Autowired
        TokenService tokenService;
    
        @Override
        public void onApplicationEvent(ApplicationEvent applicationEvent) {
            log.info("提前注入token");
        }
    }
    
    

    里面TokenService是Service层,也是我们想要注入的对象。

    这个是Filter启动的相应代码,可以看到,Listener启动顺序是最高的。

    @Bean
       public FilterRegistrationBean<AuthenticationFilter> initAuthenticationFilter(TokenService tokenService){
    
    
           FilterRegistrationBean<AuthenticationFilter> authenticationFilterFilter = new FilterRegistrationBean<>();
           AuthenticationFilter authenticationFilter = new AuthenticationFilter(tokenService);
    
           authenticationFilter.addExcludePatterns("/api/user/login");
    
           authenticationFilterFilter.setFilter(authenticationFilter);
    
           authenticationFilterFilter.setOrder(Ordered.LOWEST_PRECEDENCE);
    
           authenticationFilterFilter.addUrlPatterns("/api/*");
    
           return authenticationFilterFilter;
       }
    
    
  • 相关阅读:
    .bash_profile与.bashrc和.profile的区分概念
    java创建文件和目录
    Win7设置wifi热点
    JAVA之File类创建对象构造函数传参数需要注意的几点
    linux 控制台使用技巧
    poj1426-Find The Multiple
    Ubuntu下安装Android SDK(图文教程)
    屏蔽EditText长按导致的弹出输入法的对话框
    ZJUT 1423 地下迷宫(期望DP&高斯消元)
    Hadoop之SequenceFile
  • 原文地址:https://www.cnblogs.com/adroitwolf/p/14310143.html
Copyright © 2011-2022 走看看