跳至主要內容

Spring拦截器中注入Bean失败解放方案详解

Jin...大约 1 分钟

Spring拦截器中注入Bean失败解放方案详解

1、场景

LoginUserInfoInterceptor拦截器中需要用@Autowired注入JwtProperties 类,结果发现注入的JwtPropertiesNull

2、原因

拦截器的配置类是以new JwtInterceptor的方式使用的,那么这个LoginUserInfoInterceptor不受Spring管理。因此,里边@Autowired注入JwtProperties 是不会注入进去的。

3、问题重现

yml

jwt:
  white-list-url:
    - ${server.servlet.context-path}

拦截器配置

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    /**
     * <h2>添加拦截器配置</h2>
     */
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
//        添加用户身份统一登录拦截的拦截器
        registry.addInterceptor(new LoginUserInfoInterceptor())
                // 拦截的路径
                .addPathPatterns("/**")
                // 拦截器执行顺序,数字越小,优先级越高
                .order(0);
    }
......
}

拦截器

@Slf4j
@Component
@SuppressWarnings("all")
public class LoginUserInfoInterceptor implements HandlerInterceptor {

    @Autowired
    private JwtProperties jwtProperties;
 ......   
}

JwtProperties

@Data
@Component
@ConfigurationProperties(prefix = "jwt")
public class JwtProperties {

    private List<String> whiteListUrl;

    public List<String> getWhiteListUrl() {
        whiteListUrl.addAll(List.of("springfox", "swagger", "v2", "webjars", "doc.html"));
        return whiteListUrl;
    }
}

测试访问报错

java.lang.NullPointerException: null

4、解决方案

配置类中将new LoginUserInfoInterceptor()改为Bean的方式

    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
//        添加用户身份统一登录拦截的拦截器
        registry.addInterceptor(getLoginUserInfoInterceptor())
                // 拦截的路径
                .addPathPatterns("/**")
                // 拦截器执行顺序,数字越小,优先级越高
                .order(0);
    }

	@Bean
    public LoginUserInfoInterceptor getLoginUserInfoInterceptor(){
        return new LoginUserInfoInterceptor();
    }

拦截器(此时无需@Component)

@Slf4j
//@Component
@SuppressWarnings("all")
public class LoginUserInfoInterceptor implements HandlerInterceptor {

    @Autowired
    private JwtProperties jwtProperties;
......
}
贡献者: Jin
你认为这篇文章怎么样?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度