我想了解在Spring-MVC應用程序中定義Spring Security的推薦方式,其中bean定義被分割到多個父/子上下文中。Spring Security + MVC:關於上下文定義和bean範圍的問題
例如,我目前的應用程序的web.xml
如下所示,(我的理解是相當標準)
<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>
所以,我在/
定義的標準ContextLoaderListener
,它加載我的全球CONFIGS - applicationContext.xml
和securityContext.xml
。 我還定義了彈簧mvc DispatcherServlet
在/app/
,它從spring-mvc-servlet.xml
加載它自己的豆。
據我所知,在spring-mvc-servlet.xml
中定義的配置對任何一個頂級上下文文件中定義的配置都是不可見的。
那麼定義應用程序級安全性概念的最佳位置在哪裏?例如,我想添加以下過濾器。
<security:http pattern="/oauth/token" create-session="stateless" entry-point-ref="oauthAuthenticationEntryPoint">
<security:custom-filter ref="clientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" />
</security:http>
這是爲了通過這個過濾器請求對/app/oauth/token
通,並獲得基本的認證處理。因爲這直接關係到Spring-MVC應用程序的問題,所以我最初在spring-mvc-context.xml
中定義了它(這就是爲什麼app
不包含在url中)的原因。
但是,這意味着它對securityContext.xml
中定義的安全配置不可見,所以它被忽略。
所以,我把它移動到securityContext.xml
,但這樣做,也必須移動所有的依賴關係。 我很快結束了將所有內容移動到applicationContext.xml
,這使spring-mvc-context.xml
幾乎爲空。
這是常見的嗎?什麼是在頂級上下文中定義的內容和在子上下文中定義的內容之間的區別?
鑑於spring-mvc定義了一系列控制器,我想標記爲@Secured
,如果控制器對安全上下文不可見,這些控制器將如何處理?
我是否需要將我的<mvc:annotation-driven />
從servlet.xml
移至全球applicationContext.xml
? 我是否需要spring-mvc-servlet.xml
內的其他配置來告訴它參與Spring安全性?
我讀過documentation on Spring-MVC,但關於如何配置它的細節很少。 此外,Spring OAuth examples似乎定義了一個配置文件中的所有內容,這似乎不是真實世界,似乎與我讀過的其他示例相矛盾。