在没有 WebMvcConfigurationSupport 的情况下注册 Spring HandlerInterceptor
Posted
技术标签:
【中文标题】在没有 WebMvcConfigurationSupport 的情况下注册 Spring HandlerInterceptor【英文标题】:Register Spring HandlerInterceptor Without WebMvcConfigurationSupport 【发布时间】:2015-03-16 19:28:50 【问题描述】:我正在尝试使用 Java Config 在 Spring 中注册 HandlerInterceptor
的实例,而无需扩展 WebMvcConfigurationSupport
。我正在创建一个带有注释的库,当添加到 @Configuration
类时,它会注册一个处理安全注释的拦截器。
我有一个使用 WebMvcConfigurationSupport#addInterceptors
的实现,但这与 spring 中的其他自动工作相冲突,并覆盖了应用程序自己的一些逻辑。对于应该简单的事情来说,它似乎也非常沉重。我现在正在尝试:
@Configuration
public class AnnotationSecurityConfiguration
@Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping;
@PostConstruct
public void attachInterceptors()
requestMappingHandlerMapping.setInterceptors(new Object[]
new SecurityAnnotationHandlerInterceptor()
);
但是,拦截器注册的RequestMappingHandlerMapping
实例似乎与应用程序实际用于Web 请求的实例完全不同。此外,当作为BeanFactoryPostProcessor
实现时,当我尝试beanFactory.getBean(RequestMappingHandlerMapping.class)
时,我会在HealthMvcEndpoint
中得到NullPointerException
【问题讨论】:
供参考,这是在spring-boot-starter-web
还尝试了BeanPostProcessor
,效果与上述相同(拦截器永远不会被调用)
【参考方案1】:
只是陈述@Blauhirn 的评论,WebMvcConfigurerAdapter
is deprecated as of version 5.0:
自 5.0 起已弃用
WebMvcConfigurer
具有默认方法(通过 Java 8 基线实现),无需此适配器即可直接实现
参考新方法:
@Configuration
public class WebMvcConfig implements WebMvcConfigurer
@Override
public void addInterceptors(InterceptorRegistry registry)
registry.addInterceptor(new MyCustomInterceptor())
// Optional
.addPathPatterns("/myendpoint");
另外,as stated here,如果您想使用keep Spring Boot auto configuration for MVC,请不要使用@EnableWebMvc
对此进行注释。
【讨论】:
在我的答案中添加了更新以反映此更改。感谢您的更新。【参考方案2】:编辑:此类已被弃用。请参阅下面的 @bosco answer 了解 Spring 5 等效项。
想通了,解决办法就是用,简单:
@Configuration
public class AnnotationSecurityConfiguration extends WebMvcConfigurerAdapter
@Override
public void addInterceptors(InterceptorRegistry registry)
registry.addInterceptor(new SecurityAnnotationHandlerInterceptor());
在spring boot中,所有WebMvcConfigurer
类型的bean都会被自动检测并可以修改MVC上下文。
【讨论】:
sicneWebMvcConfigurerAdapter
在 spring 5 中已被弃用,可能应该使用 implements WebMvcConfigurer
(未测试)以上是关于在没有 WebMvcConfigurationSupport 的情况下注册 Spring HandlerInterceptor的主要内容,如果未能解决你的问题,请参考以下文章
在 Facebook 上分享有时效果很好,有时效果不佳(没有标题、没有描述、没有缩略图)
在没有隐藏溢出的情况下,transitionend 事件在 FireFox 中没有持续触发
有没有办法在没有活动的情况下使用 Viewpager 实现 TabLayout?