2016-07-07 7 views
0

既存の(古い)アプリケーションでSpringMVCを使用してREST APIを開発し、春のセキュリティを使用した認証認証。しかし、私は上記のエラーになっています。子コンテキスト用Spring Security - フィルタチェーン内の他のパタ​​ーンの前にユニバーサルマッチパターン( '/ **')が定義されています

ここでは、REST APIに特定のコンテキストを使用し、ルートコンテキストを古いアプリケーションに保持することを試みています。私はアプリケーションのREST APIの部分だけにセキュリティを持ちたいと思っています。私の春-のsecurity.xml

私のセキュリティ設定クラス

@Configuration 
@ImportResource({"classpath:/spring-security.xml" }) 
public class SecurityConfig {} 
を見つけてください、私のWeb.xml

<servlet> 
    <servlet-name>mobileDispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>2</load-on-startup> 
    <init-param> 
     <param-name>contextClass</param-name> 
     <param-value> 
      org.springframework.web.context.support.AnnotationConfigWebApplicationContext 
     </param-value> 
    </init-param> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>a.b.c.d.WebConfig</param-value> 
    </init-param> 
</servlet> 

<servlet-mapping> 
    <servlet-name>mobileDispatcher</servlet-name> 
    <url-pattern>/mobile/*</url-pattern> 
</servlet-mapping> 

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>contextAttribute</param-name> 
     <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.mobileDispatcher</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/mobile/*</url-pattern> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
    <dispatcher>ERROR</dispatcher> 
</filter-mapping> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

を見つけてください

(../mobile/**で始まるURLの場合)

<sec:http auto-config='true'> 
    <sec:intercept-url pattern="/mobile/**" access="ROLE_USER" /> 
</sec:http> 
<beans:bean id="inMemoryAuthenticationUserDetailsService" 
      class="a.b.c.d.InMemoryAuthenticationUserDetailsService"/> 

<beans:bean id="preAuthenticatedProcessingFilterEntryPoint" 
      class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/> 

<beans:bean id="preAuthenticatedAuthenticationProvider" 
      class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> 
    <beans:property name="preAuthenticatedUserDetailsService" ref="inMemoryAuthenticationUserDetailsService"/> 
</beans:bean> 

<beans:bean id="simpleAttributes2GrantedAuthoritiesMapper" 
      class="org.springframework.security.core.authority.mapping.SimpleAttributes2GrantedAuthoritiesMapper"> 
    <beans:property name="attributePrefix" value=""/> 
</beans:bean> 

<beans:bean id="webXmlMappableAttributesRetriever" 
      class="org.springframework.security.web.authentication.preauth.j2ee.WebXmlMappableAttributesRetriever"/> 

<beans:bean id="j2eeBasedPreAuthenticatedWebAuthenticationDetailsSource" 
      class="org.springframework.security.web.authentication.preauth.j2ee.J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource"> 
    <beans:property name="mappableRolesRetriever" ref="webXmlMappableAttributesRetriever"/> 
    <beans:property name="userRoles2GrantedAuthoritiesMapper" ref="simpleAttributes2GrantedAuthoritiesMapper"/> 
</beans:bean> 

<beans:bean id="preAuthFilter" 
      class="org.springframework.security.web.authentication.preauth.j2ee.J2eePreAuthenticatedProcessingFilter"> 
    <beans:property name="authenticationManager" ref="appControlAuthenticationManager"/> 
    <beans:property name="authenticationDetailsSource" 
        ref="j2eeBasedPreAuthenticatedWebAuthenticationDetailsSource"/> 
</beans:bean> 

<sec:authentication-manager alias="appControlAuthenticationManager"> 
    <sec:authentication-provider ref="preAuthenticatedAuthenticationProvider"/> 
</sec:authentication-manager> 

この問題の原因は何ですか?スタックオーバーフローで同様の質問を行った後は、セキュリティコンテキストをルートコンテキストに配置する必要があるように感じますが、既存のアプリケーションで使用されているので、ルートコンテキストに触れたくありません。

答えて

0

上記の設定に何も問題はありません。問題は偶然、spring-security.xmlをインポートした別のConfigファイルにあります。したがって、spring-security.xmlは2回インポートされました。一度それを取り除くと、すべてが完璧に機能しました。

関連する問題