注册弹簧处理程序接收器,不带 WebMvc 配置支持

2022-09-04 08:17:27

我正在尝试使用Java Config在Spring中注册一个实例,而无需扩展。我正在创建一个带有注释的库,当将其添加到类中时,将注册一个处理安全注释的侦听器。HandlerInterceptorWebMvcConfigurationSupport@Configuration

我有一个使用 的实现,但它与春季的其他自动工作原理相冲突,并覆盖了应用程序自己的一些逻辑。对于应该简单的事情来说,它似乎也非常沉重。我现在正在尝试:WebMvcConfigurationSupport#addInterceptors

@Configuration
public class AnnotationSecurityConfiguration {

    @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping;

    @PostConstruct
    public void attachInterceptors() {
        requestMappingHandlerMapping.setInterceptors(new Object[] {
                new SecurityAnnotationHandlerInterceptor()
        });
    }

}

但是,拦截器注册的实例似乎与应用程序实际用于 Web 请求的实例完全不同。此外,当作为一个,当我尝试时,我会得到一个RequestMappingHandlerMappingBeanFactoryPostProcessorNullPointerExceptionHealthMvcEndpointbeanFactory.getBean(RequestMappingHandlerMapping.class)


答案 1

仅@Blauhirn的评论,WebMvcConfigurerAdapter从5.0版开始被弃用

从 5.0 开始不推荐使用,具有默认方法(由 Java 8 基准实现),并且可以直接实现,而无需此适配器WebMvcConfigurer

请参阅执行此操作的新方法:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyCustomInterceptor())
        // Optional
        .addPathPatterns("/myendpoint");
    }
}

另外,如这里所述,如果要保留 MVC 的 Spring Boot 自动配置,请不要使用 对此进行注释。@EnableWebMvc


答案 2

编辑:此类已被弃用。请参阅下面的@bosco答案,了解春季5的等效项。

弄清楚了,解决方案是简单地使用:

@Configuration
public class AnnotationSecurityConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SecurityAnnotationHandlerInterceptor());
    }

}

在 Spring Boot 中,将自动检测所有类型的 Bean,并且可以修改 MVC 上下文。WebMvcConfigurer


推荐