2012-04-23 22 views
0

私はシンプルな春のMVC /春のセキュリティWebアプリケーションをセットアップしようとしていますが、私はこれを達成する方法を見つけるように見えることはできません。シンプルなSpring MVCの+のセキュリティ設定

  1. 私が使用したいです通常の@Securedアノテーションを使用し、ユーザーがログインしていない場合はログインページにリダイレクトして元の場所に戻したい(これは正常な動作です)
  2. 私はログインフォームを私自身のコントローラ/テンプレートのペアにしたいと思います。
  3. 上記のログインフォームを自分のコントローラに送信して、バックエンドの快適なサービスに対してユーザーの資格情報を認証することをお勧めします。その後、サービスからセキュリティトークンを受信します。この時点で、認証された認証済みのセッションに手動でフラグを立てて、それにトークンを添付したいと思います。

最終段階の実装についてはどうすればよいですか?

答えて

0

OK答えは基本的に次のとおりです。

SecurityContextHolder.getContext().setAuthentication(...) 

しかし、私はSpring MVCのコントローラは認証プロセスを制御ところ、上記のシナリオでそれを使用できるようにするには、いくつか他のものが行われる必要があります。

  1. あなたはどちらかのいずれかを使用する必要があります使用可能なImpls of Authenticationを作成するか、作成します。私は、AbstractAuthenticationTokenをサブクラス化するのが最良であることを発見しました。
  2. 春のセキュリティは、このシナリオで使用されていない認証マネージャなしで起動しませんので、私はヌル認証マネージャ作成:

    @Service("nullAuthenticationProvider") 
    public class NullAuthenticationProvider implements AuthenticationProvider 
    { 
        @Override 
        public Authentication authenticate(Authentication authentication) throws AuthenticationException 
        { 
         return authentication; 
        } 
    
        @Override 
        public boolean supports(Class<?> authentication) 
        { 
         return true; 
        } 
    } 
    
  3. そして最後に春のcontext.xml:

    <security:global-method-security secured-annotations="enabled" /> 
    
    <security:http disable-url-rewriting="true"> 
        <security:access-denied-handler error-page="/login" /> 
        <security:form-login login-page="/login" /> 
    </security:http> 
    
    <security:authentication-manager> 
        <security:authentication-provider ref='nullAuthenticationProvider'/> 
    </security:authentication-manager> 
    
1

私は、私は完全にあなたの質問を理解してかどうかわからないのですが、私はそれを正しく理解すれば、あなたはおそらくAbstractPreAuthenticatedProcessingFilterを拡張し、/コントローラなど、あなたの安らかなサービスへの呼び出しでgetPreAuthenticatedPrincipalとgetPreAuthenticatedCredentialsを上書きオーバーライドAuthenticationUserDetailsS​​erviceを、簡単なサービスをprobideすることができます、およびセキュリティコンテキストは、このようにすることを追加します。

<beans:bean id="preauthAuthProvider" 
      class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> 
    <beans:property name="preAuthenticatedUserDetailsService"> 
     <beans:bean class="com.YourCompany.YourPreAuthenticatedGrantedAuthoritiesUserDetailsService"></beans:bean> 
    </beans:property> 
    <beans:property name="order" value="1"/> 
</beans:bean> 


<authentication-manager alias="authenticationManager" > 
    <authentication-provider ref="preauthAuthProvider" ></authentication-provider> 
</authentication-manager> 
+0

これは私がSpring Securityのチェーン内の特定の要素を無効にして、自分のサービスに対する認証を達成できることを意味します。私がしたいのは、ログインフォームを通常のSpring MVCコントローラ(これまでのSpringセキュリティは関与していません)に送信することです。その春のMVCコントローラーから、サービスに対する認証を実行します(再び春のセキュリティは関係しません)。これまでの処理が成功した場合は、セッションをSpringセキュリティで認証されたものとして手動でフラグを立て、spring mvcコントローラからプリンシパルを確立します。 –

関連する問題