织梦网做网站步骤,营销网络和网络营销的区别,logo设计生成,网站建设文化方案最近同事说他们有个新需求#xff0c;需要对接口进行加解密#xff0c;所以他给项目配置了一个拦截器#xff0c;但这个拦截器直接导致了所有接口鉴权失败#xff0c;每次调用接口都是提示没有session信息。 公司内的所有java项目是公用同一套基础依赖#xff0c;所以我也…最近同事说他们有个新需求需要对接口进行加解密所以他给项目配置了一个拦截器但这个拦截器直接导致了所有接口鉴权失败每次调用接口都是提示没有session信息。 公司内的所有java项目是公用同一套基础依赖所以我也为自己的项目配置了一个拦截器我在启动项目后我请求了项目中的一个接口session鉴权通过没有出现他那种情况。
归属代码本人同事
对比了下两人的代码发现基本逻辑是一样我的代码没有 EnableWebMvc这个注解我一般都不加Enable注解springboot中一般不需要Enable开头的注解我推测应该是这个注解有问题。查看 EnableWebMvc注解导入了一个配置类DelegatingWebMvcConfiguration
Retention(RetentionPolicy.RUNTIME)
Target(ElementType.TYPE)
Documented
Import(DelegatingWebMvcConfiguration.class)
public interface EnableWebMvc {
}DelegatingWebMvcConfiguration中有setConfigurers方法这个方法是用了自动注入所有的WebMvcConfigurer DelegatingWebMvcConfiguration有一个子类EnableWebMvcConfiguration,而EnableWebMvcConfiguration是自动配置类WebMvcAutoConfiguration的一个静态内部类。 WebMvcAutoConfiguration 自动配置类为我们配置了spring mvc方面的过滤器、编解码器、视图解析器等。 WebMvcAutoConfiguration类上有一行注解代码ConditionalOnMissingBean(WebMvcConfigurationSupport.class) ,它表示只有当spring容器中不存在WebMvcConfigurationSupport类型bean时此自动配置类才生效。 而我们只要在项目代码中使用EnableWebMvcConfiguration注解就会向容器中注册一个EnableWebMvcConfiguration注解所导入的DelegatingWebMvcConfiguration类型的Bean,而DelegatingWebMvcConfiguration是WebMvcConfigurationSupport的子类。也就是说只要使用了EnableWebMvcConfiguration注解容器中就会被注册一个WebMvcConfigurationSupport类型的Bean而WebMvcConfigurationSupport 类型bean存在时配置类WebMvcAutoConfiguration是不生效的。这样导致springmvc的自动配置全部失效与此相关的所有配置都需要自己手动配置而我们项目中的公用基础依赖的鉴权是又要依赖spring mvc的自动配置那么此时线程上下文中便无法注入session信息最终导致接口调用时鉴权失败。 所以解决方案是删掉EnableWebMvc注解删除掉后一切恢复正常。 建议在spring boot环境下非必要情况下不要加类似EnableXXX的注解除非你明确知道它是无副作用的。