[SPRING] 스프링 부트에서 RequestContextListener 구성하기
SPRING스프링 부트에서 RequestContextListener 구성하기
Spring Security를 사용하는 Spring-Boot 응용 프로그램이 있습니다. 보안 필터 체인에서 내 사용자 지정 필터 중 하나에 자동으로 연결하려는 요청 범위의 Bean이 있지만 현재 작동하지 않습니다.
DispatcherServlet 외부 요청 범위 콩을 사용하려면 일부 구성이 필요하다는 것을 알고 있으며 http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html을 읽었습니다. # beans-factory-scope-other 그러나 아직 성공하지 못했습니다 :
(최신 Tomcat을 사용하고 있으므로 서블릿 3 이상이됩니다.)
내가 RequestContextListener 및 RequestContextFilter (문서 그들과 DispatcherServlet, 정확히 똑같은 말을 사용하여),하지만 두 경우 모두에서 여전히 내 autowired 개체가 null 때문에 오류가 발생했습니다 :
필터를 등록하려고했습니다.
@Configuration
@ComponentScan
@EnableAutoConfiguration
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
application.sources( Application )
}
@Override public void onStartup( ServletContext servletContext ) throws ServletException {
super.onStartup( servletContext )
servletContext.addFilter("requestContextFilter", new RequestContextFilter() ).addMappingForUrlPatterns(null, false, "/*")
}
리스너 등록 시도
@Configuration
@ComponentScan
@EnableAutoConfiguration
class Application extends SpringBootServletInitializer {
@Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
application.sources( Application )
}
@Override public void onStartup( ServletContext servletContext ) throws ServletException {
super.onStartup( servletContext )
servletContext.addListener( new RequestContextListener() )
}
나는 명백한 무엇인가 놓치고 있냐? 나는 스프링 부트 (Spring Boot)를위한 자동 설정 소스 코드를 살펴 보았고, 아직 아무것도 알지 못했다.
최신 정보
나는 바보 였고, SpringSecurity 설정 내 filter를 configure () 메소드 내부에 추가했다.
http.addFilterBefore( new PreAuthFilter(), BasicAuthenticationFilter )
Bean으로 새 필터를 등록하지 않았습니다. 아래의 M. Denium의 설명에 따르면, 추가 구성에 명시 적으로 리스너 / 필터를 추가 할 필요는 없으며 단지 bean 등록만으로 충분했습니다.
해결법
-
==============================
1.업데이트 / 설명에서 자세히 설명했듯이, 이것은 내 자신의 어리 석음으로 인한 것입니다.
업데이트 / 설명에서 자세히 설명했듯이, 이것은 내 자신의 어리 석음으로 인한 것입니다.
Spring-Boot는 Request / Session 범위 Bean을 DispatcherServlet 외부에있는 필터에 autowire 할 수있다. Spring의 문서에 따라이 기능을 사용하려면 RequestContextListener 또는 RequestContextFilter를 추가해야한다.
이를 처리하기 위해 RequestContextListener 빈을 등록해야했습니다.
@Bean public RequestContextListener requestContextListener(){ return new RequestContextListener(); }
빈을 등록하지 않으면 DispatcherServlet 외부의 Request 범위에 액세스하려고한다는 오류가 발생합니다.
내가 경험 한 문제 (autowired 객체가 삽입되지 않은 것)는 스프링 관리 빈이 아닌 표준 클래스 인스턴스로 사용자 정의 필터를 등록했다는 사실 때문에 발생했다.
http.addFilterBefore( new PreAuthFilter(), BasicAuthenticationFilter )
이 문제를 해결하기 위해 필자는 사전 인증 필터를 별도의 @Bean 메서드로 옮겼습니다. @Autowired 기능이 제대로 작동했습니다.
from https://stackoverflow.com/questions/30254079/configuring-requestcontextlistener-in-springboot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 바람둥이 클러스터에있는 Spring Websocket (0) | 2019.03.03 |
---|---|
[SPRING] 스프링 MVC 세션 속성 액세스 (0) | 2019.03.03 |
[SPRING] web.xml, beans.xml, applicationContext.xml 등의 차이점 (0) | 2019.03.03 |
[SPRING] Spring REST 템플릿을 사용하여 너무 많은 연결을 만들거나 느려진다. (0) | 2019.03.03 |
[SPRING] 메이븐 프로파일 또는 스프링 프로파일? (0) | 2019.03.03 |