2016-07-01 18 views
0

異なる名前空間を持つ2つのフォームログインを作成したいのですが、1つはユーザーログイン(名前空間のデフォルト "/")、もう1つは管理者ログインの名前空間 "/ admin"です。 私は、プログラムを実行すると、ユーザーのフォームログインは正常に実行されます。しかし、管理者用のフォームログインは失敗します。Springセキュリティで異なる名前空間を持つ複数のログインフォーム

は、これは私のファイルの春のセキュリティです:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/security 
http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 

<http pattern="/login*" security="none" /> 
<http pattern="/admin/" security="none" /> 

<http pattern="/admin/**"> 
    <intercept-url pattern='admin/**' access='ROLE_ADMIN' /> 
    <access-denied-handler error-page="/user/403.jsp" /> 
    <form-login login-page="/adminLogin" default-target-url="/adminAccess" 
     authentication-failure-url="/adminLogin?error" username-parameter="username" 
     password-parameter="password" /> 
    <logout logout-success-url="/adminLogin?logout" /> 
    <http-basic /> 
</http> 
<http> 
    <intercept-url pattern="/user" access="ROLE_USER" /> 
    <intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" /> 
    <access-denied-handler error-page="/user/403.jsp" /> 
    <form-login login-page="/login" default-target-url="/userAccess" 
     authentication-failure-url="/login?error" username-parameter="username" 
     password-parameter="password" /> 
    <logout logout-success-url="/login?logout" /> 
</http> 

<beans:bean id="daoAuthenticationProvider" 
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> 
    <beans:property name="userDetailsService" ref="userDetailsService" /> 
</beans:bean> 

<beans:bean id="authenticationManager" 
    class="org.springframework.security.authentication.ProviderManager"> 
    <beans:property name="providers"> 
     <beans:list> 
      <beans:ref local="daoAuthenticationProvider" /> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

<authentication-manager erase-credentials="false"> 
    <authentication-provider user-service-ref="userDetailsService"> 
    </authentication-provider> 
</authentication-manager> 

私は管理者(名前空間 "/管理者")のフォーム・ログインでログインし、エラーがmesseage「HTTPステータス404で起こった - ありアクションは、名前空間[/管理]とアクション名[j_spring_security_check]コンテキストパス[/ Javaベースのフレームワーク]に関連付けられているためにマッピングされていない」

私のweb.xmlファイルに次フィルタ:

0私のstruts.xmlファイルで

処置:

<package name="default" namespace="/" extends="struts-default"> 
    <action name="login"> 
     <result>USER_LOGIN_SPRING_SECURITY</result> 
    </action> 
    <action name="userAccess" class="springAdminAction" method="execute"> 
     <result name="success">USER_SPRING_SECURITY</result> 
    </action> 

パターン admin/**よう
<package name="admin" namespace="/admin" extends="default-web-admin"> 
<action name="adminAccess" class="springAdminAction" method="execute"> 
     <result name="success">ADMIN_SPRING_SECURITY</result> 
    </action>  
<action name="adminLogin"> 
     <result>ADMIN_LOGIN_SPRING_SECURITY</result> 
    </action> 

答えて

0

ルックは<http pattern="/admin/**">中の添加剤です。

<http pattern="/admin/**"> 
    <intercept-url pattern='/admin/**' access='ROLE_ADMIN' /> 

これは/admin/admin/**代わりの/admin/**の春のセキュリティ保護されたURLを要求します。

それは助けることができるかどうかを確認し、次の試してみてください。

<http pattern="/admin/**"> 
    <intercept-url pattern='/**' access='ROLE_ADMIN' /> 

編集:

あなたのエラーから:

HTTP Status 404 - There is no Action mapped for namespace [/admin] and action name [j_spring_security_check] associated with context path [/Java-framework].

サーバーへのURLのPOSTが/admin/j_spring_security_checkする必要がありますが、デフォルトのURLで、認証プロセスを起動するためのSpring Security Form Loginは/j_spring_security_checkです。

これが原因でSpring Securityが認証され、/admin/j_spring_security_checkの要求がStrutsフィルタに渡され、そのエラーが発生します。

j_spring_security_checkのこのURLは<form-login>login-processing-url属性で上書きすることができます。

login-processing-url="/admin/j_spring_security_check" 

以下でこれを試してください:

<form-login login-page="/adminLogin" 
      login-processing-url="/admin/j_spring_security_check" 
      default-target-url="/adminAccess" 
      authentication-failure-url="/adminLogin?error" 
      username-parameter="username" 
      password-parameter="password" /> 

Edited2:

あなたの別のエラーから、

HTTP Status 404 - There is no Action mapped for namespace [/admin] and action name [j_spring_security_logout] associated with context path [/Java-framework]

フォームログアウトのデフォルトURLがj_spring_security_logoutの原因は同様です。 logout-urlで上書きすることができます。

あなたのログアウトフィルタは次のようになります:

<logout logout-url="/admin/j_spring_security_logout" 
     logout-success-url="/adminLogin?logout" /> 
+0

はい、私はあなたが本当の話だと思うが、それはその上で、エラーを解決しません。私の問題は、名前空間 "/ admin"で春のセキュリティの動作をマップすることができないということです。 これは名前空間のデフォルトの "/"でうまく動作します – joseJv

+0

@joseJv springSecurityFilterChainのフィルタの順序がweb.xmlのstrutsフィルタの前にある場合、フォームアクションはSpringセキュリティで処理されてからstrutsフィルタが処理されます。あなたのURLが春のセキュリティで設定されたパターンと一致した場合、それは春のセキュリティによって処理されます。 web.xmlのフィルタと構成をstruct xmlで確認してください。可能であれば、春のセキュリティについてスタックトレースを投稿してください。ヒントがいくつかあります。 – Wilson

+0

私はweb.xmlの注文フィルタが真であると思います。なぜなら、私はユーザ(名前空間 "/")のフォームログインを持っているからです。それはうまくいく。 Admin(名前空間 "/ admin")のためのフォームログインだけで失敗します。 私のスタックトレースは特別なものを表示しません。 "HTTPステータス404 - 名前空間[/ admin]にアクションがマッピングされておらず、コンテキストパス[/ Java-framework]に関連付けられているアクション名[j_spring_security_check]が表示されているだけです" 私の支柱をチェックしますか?私のための春のセキュリティファイルとXML? – joseJv

関連する問題