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;
       }
    
    
  • 相关阅读:
    JS两个页面通过URL传值
    新起点 新开始
    Spring Boot 常见标签
    关于Redis缓存数据库
    JPA问题汇总
    Dynamic 报表服务开发
    Dynamic crm自定义页面
    Dynamic 根据用户的角色权限设置相应的按钮显示
    Dynamic 工具类
    Dynamic 点击按钮,弹出一个漂浮页面
  • 原文地址:https://www.cnblogs.com/adroitwolf/p/14310143.html
Copyright © 2011-2022 走看看