Tôi đang cố gắng hiểu cách được xác định lại để xác định Spring Security trong các ứng dụng Spring-MVC, nơi các định nghĩa bean được phân chia trên nhiều bối cảnh cha/con.Spring Security + MVC: Các câu hỏi xung quanh định nghĩa ngữ cảnh và phạm vi đậu
Ví dụ, ứng dụng hiện tại của tôi web.xml
trông như sau, (mà tôi hiểu là khá chuẩn)
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
/WEB-INF/securityContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
Vì vậy, tôi có một tiêu chuẩn ContextLoaderListener
quy định tại /
, mà tải configs toàn cầu của tôi - applicationContext.xml
và securityContext.xml
. Tôi cũng xác định mvc mùa xuân DispatcherServlet
tại /app/
, tải hạt đậu của riêng nó từ spring-mvc-servlet.xml
.
Như tôi đã hiểu, cấu hình được xác định trong spring-mvc-servlet.xml
không hiển thị với cấu hình được xác định trong tệp ngữ cảnh cấp cao nhất.
Vị trí tốt nhất để xác định khái niệm bảo mật cấp ứng dụng ở đâu? Ví dụ: tôi muốn thêm bộ lọc sau.
<security:http pattern="/oauth/token" create-session="stateless" entry-point-ref="oauthAuthenticationEntryPoint">
<security:custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" />
</security:http>
Đây là yêu cầu để /app/oauth/token
chuyển qua bộ lọc này và nhận được xác thực cơ bản được xử lý.
Vì điều này liên quan trực tiếp đến mối quan tâm của ứng dụng Spring-MVC, ban đầu tôi xác định nó trong spring-mvc-context.xml
(đó là lý do tại sao app
bị loại trừ khỏi url).
Tuy nhiên, điều này có nghĩa là nó không hiển thị với cấu hình bảo mật được xác định trong securityContext.xml
, do đó, nó bị bỏ qua.
Vì vậy, tôi di chuyển nó lên đến securityContext.xml
, nhưng khi làm như vậy, cũng phải di chuyển tất cả các phụ thuộc. Tôi nhanh chóng kết thúc việc di chuyển mọi thứ lên đến applicationContext.xml
, để lại spring-mvc-context.xml
gần như trống.
Điều này có phổ biến không? Sự chia rẽ được đề xuất giữa những gì được xác định trong các bối cảnh cấp cao nhất và những gì được xác định trong ngữ cảnh con?
Cho rằng spring-mvc định nghĩa một loạt các bộ điều khiển mà tôi muốn đánh dấu là @Secured
, chúng sẽ được xử lý như thế nào nếu bộ điều khiển không hiển thị trong bối cảnh bảo mật?
Tôi có cần phải di chuyển <mvc:annotation-driven />
của mình từ servlet.xml
tới toàn cầu applicationContext.xml
không? Tôi có cần cấu hình bổ sung trong số spring-mvc-servlet.xml
để yêu cầu nó tham gia bảo mật mùa xuân không?
Tôi đã đọc số documentation on Spring-MVC, nhưng có rất ít chi tiết cụ thể về cách định cấu hình này. Ngoài ra, các Spring OAuth examples dường như để xác định tất cả mọi thứ trong một tập tin cấu hình duy nhất, mà không có vẻ rất thực tế, và dường như mâu thuẫn với các ví dụ khác tôi đã đọc.