Tôi có một ứng dụng Khởi động Spring sử dụng Spring-Security. Tôi có một yêu cầu phạm vi đậu mà tôi muốn autowire vào một trong các bộ lọc tùy chỉnh của tôi trong chuỗi bộ lọc bảo mật, nhưng tại thời điểm nó không hoạt động.Định cấu hình RequestContextListener trong SpringBoot
Tôi hiểu rằng một số cấu hình là cần thiết để sử dụng yêu cầu scoped đậu bên ngoài của DispatcherServlet, và đã đọc http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-other này Nhưng đã không có bất kỳ thành công nào:
Đối với Servlet 3.0+, điều này có thể thực hiện theo chương trình qua giao diện WebApplicationInitializer.
(Tôi đang sử dụng mới nhất Tomcat như vậy là servlet 3+)
Tôi đã cố gắng sử dụng cả RequestContextListener và RequestContextFilter (tài liệu nói rằng họ, và DispatcherServlet, làm chính xác những điều tương tự), nhưng trong cả hai trường hợp tôi vẫn nhận sai lầm vì đối tượng autowired của tôi là null:
nỗ lực của tôi để đăng ký Lọc
@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, "/*")
}
nỗ lực của tôi để đăng ký Listener
@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())
}
Tôi có thiếu thứ gì đó hiển nhiên không? Tôi đã có một cái nhìn tại mã nguồn tự động cấu hình cho Spring Boot và đã không đi qua bất cứ điều gì được nêu ra.
CẬP NHẬT
tôi đang bị một thằng ngốc, tôi đã thêm Bộ lọc của tôi trong cấu hình SpringSecurity của tôi, bên trong configure()
phương pháp:
http.addFilterBefore(new PreAuthFilter(), BasicAuthenticationFilter)
nhưng đã không đăng ký Filter mới như một Bean. Theo bình luận của M. Denium dưới đây, tôi không cần tất cả các cấu hình bổ sung đó một cách rõ ràng thêm bộ lọc/bộ lọc, chỉ cần đăng ký đậu là đủ.
Bạn đang biến nó thành phức tạp. Chỉ cần thêm phương thức '@ Bean' để xây dựng' RequestContextListener'. Spring Boot sẽ làm phần còn lại. Tuy nhiên điều đó không cần thiết vì chuỗi bộ lọc bảo mật mùa xuân nằm dưới sự kiểm soát của Spring, vì vậy trừ khi bạn đang làm những thứ bên ngoài chuỗi bộ lọc thực tế, bạn sẽ cần phải đăng ký cái này nó chỉ hoạt động. –
Cảm ơn @ M.Deinum - hóa ra tôi đã là một thằng ngốc - tôi đã cập nhật câu hỏi với các chi tiết, nhưng về cơ bản đã không đăng ký bộ lọc chính xác. – rhinds