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;
       }
    
    
  • 相关阅读:
    登录业务逻辑相关
    自定义弹出效果
    'Missing recommended icon file
    检查项目里是否有IDFA的方法
    cell当中的按钮如何获得cell内容
    iOS开发中打电话发短信等功能的实现
    iOS 判断设备型号
    iOS 根据字符串内容动态计算行高
    IOS TableView 去除点击后产生的灰色背景
    App上架流程(2016最新)
  • 原文地址:https://www.cnblogs.com/adroitwolf/p/14310143.html
Copyright © 2011-2022 走看看