2016-11-23 15 views
0

私が取り組んでいるWebアプリケーションはSpring Securityを使用しています。私は、許可されていない要求がコントローラの1つ(access-denied-handlerを使用して)によって処理されるように設定しました。しかし、誰かがログインする前にページにアクセスしようとすると、彼はコントローラを通過することなくログインページで自分自身を見つけます。私は、このケースを上記のコントローラと同じコントローラで処理する必要があります。Spring Securityで認証されていないユーザーをログインページにリダイレクトしないようにするにはどうすればよいですか?

similar questionがあります。ここでは、REST API要求はコントローラによって処理され、残りの要求はログインページにリダイレクトされます。これは2つのエントリーポイントを使用して達成されました。私が望むのは、サービス呼び出しや静的ページなど、すべての不正な/認証されていない要求を1つのコントローラが処理することです。したがって、私は2つの異なるメカニズムを必要としません。まだエントリポイントを設定する必要はありますか?私はこれを行う簡単な方法があるはずです。

<http use-expressions="true" pattern="/**" authentication-manager-ref="operatorAuthenticationManager"> 
    <access-denied-handler error-page="/denied" /> 

    <intercept-url pattern="/order/**" access="hasAnyAuthority('ROLE_ADMIN','ROLE_OPERATOR')"/> 
    <intercept-url pattern="/client/**" access="hasAnyAuthority('ROLE_ADMIN')"/> 
    <intercept-url pattern="/denied" access="permitAll"/> 
    <intercept-url pattern="/login" access="permitAll"/> 
    <intercept-url pattern="/login.jsp" access="permitAll"/> 
    ... 
    <intercept-url pattern="/**" access="hasAnyAuthority('ROLE_ADMIN','ROLE_OPERATOR')"/> 

    <form-login login-page="/login" default-target-url="/" always-use-default-target="true" 
       authentication-success-handler-ref="operatorAuthenticationSuccessHandler" authentication-failure-url="/login?error"/> 
    <logout logout-success-url="/login"/> 
</http> 

答えて

1

エントリポイントは次のとおりです:認証処理が認証されていないユーザーによって試みによってトリガーされる

は、保護されたリソースにアクセスするために、ここで

は私のセキュリティ設定は、おおよそ次のようになります

エントリーポイントBeanは、あなたの要件に完全に合っています。

エントリポイントでは、エラーページへのリダイレクトを定義できます。

HttpServletResponse sendRedirect permanent

@Component 
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint{ 

    @Override 
    public void commence(HttpServletRequest request, HttpServletResponse response, 
    AuthenticationException authException) throws IOException{ 
     //your implementation 
    } 
} 

上記の例では、HttpServletReponseでリダイレクトを行う方法を把握する必要がありますことを示し、ここでそれを行う方法を示したリンクです

関連する問題