2015-01-18 9 views
5

Ich versuche, eine Instanz von HandlerInterceptor im Frühling mit Java Config ohne Verlängerung WebMvcConfigurationSupport zu registrieren. Ich erstelle eine Bibliothek mit einer Anmerkung, die bei Hinzufügen zu einer Klasse einen Interceptor registriert, der eine Sicherheitsanmerkung verarbeitet.Registrieren Spring HandlerInterceptor Ohne WebMvcConfigurationSupport

Ich hatte eine Implementierung mit WebMvcConfigurationSupport#addInterceptors, aber das im Konflikt mit anderen automatischen Funktionen im Frühjahr, und überging einige der eigenen Logik der Anwendung. Es scheint auch unglaublich schwer für etwas, das einfach sein sollte. Ich versuche jetzt:

@Configuration 
public class AnnotationSecurityConfiguration { 

    @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping; 

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

} 

Es scheint jedoch, dass die Abfangjäger mit einer ganz anderen Instanz von RequestMappingHandlerMapping als die tatsächlich verwendet die Anwendung für Web-Anfragen registriert werden. Zusätzlich wird, wenn als BeanFactoryPostProcessor implemeted, erhalte ich eine NullPointerException in HealthMvcEndpoint wenn ich versuche, beanFactory.getBean(RequestMappingHandlerMapping.class)

+0

Als Referenz ist dies in "Spring-Boot-Starter-Web" –

+0

Probieren Sie auch einen 'BeanPostProcessor' mit dem gleichen Effekt wie oben (der Interceptor wird nie aufgerufen) –

Antwort

7

figured it out, ist die Lösung zu verwenden, einfach:

@Configuration 
public class AnnotationSecurityConfiguration extends WebMvcConfigurerAdapter { 

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

} 

Im Frühjahr Boot, alle Bohnen vom Typ WebMvcConfigurer werden automatisch erkannt und können den MVC-Kontext ändern.

+1

sicne' WebMvcConfiguratorAdapter' ist mit der Feder 5 veraltet, man sollte wahrscheinlich 'implements WebMvcConfigurer' verwenden (nicht getestet) – Blauhirn

Verwandte Themen