2017-04-27 11 views
1

私はプログラムセキュリティ(XMLではない)構成を使用して春のセキュリティを構成しています。デフォルトでは、ユーザーがログインせずに保護されたリソースにアクセスしようとすると、ログインページに転送されます。しかし、私はログインページに常にリダイレクトするのではなく、カスタムロジックを書く必要があります。これを設定する方法はありますか?Spring Security:ユーザーが認証されていない場合、プログラミングロジックで転送ロジックを定義する方法

http.antMatcher("/protected/**").authorizeRequests().anyRequest().authenticated()... 

答えて

4

あなたはHTTPにBasic authenticationを使用すると仮定し、あなたは、あなたがHttpServletRequestオブジェクトを取得することができ、EntryPointを設定する必要があります。

public class CustomBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint { 

    @Override 
    public void commence(final HttpServletRequest request, final HttpServletResponse response, 
      final AuthenticationException authException) throws IOException, ServletException { 
     request.getDispatcherServlet().forward()... 
     response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); 
     response.addHeader("WWW-Authenticate", "Basic realm=\"" + getRealmName() + "\""); 

     PrintWriter writer = response.getWriter(); 
     writer.println("HTTP Status 401 : " + authException.getMessage()); 
    } 

    @Override 
    public void afterPropertiesSet() throws Exception { 
     setRealmName(WebSecurityConfig.REALM); 
     super.afterPropertiesSet(); 
    } 
} 

そして、春のセキュリティ設定に以下を追加します。

.and().exceptionHandling().authenticationEntryPoint(new CustomBasicAuthenticationEntryPoint()); 
関連する問題