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;
       }
    
    
  • 相关阅读:
    TCP/IP笔记 一.综述
    Makefile的规则
    u盘安装ubuntu10.04 server.txt
    浅谈数据库技术,磁盘冗余阵列,IP分配,ECC内存,ADO,DAO,JDBC
    cocos2d-js 热更新具体解释(一)
    C#一个托付的样例
    JAVA学习之 异常处理机制
    阿里巴巴校招内推简历筛选方案
    《凑硬币》 动态规划算法入门
    android 读取xml
  • 原文地址:https://www.cnblogs.com/adroitwolf/p/14310143.html
Copyright © 2011-2022 走看看