2011-07-06 8 views

答えて

4

は、最も信頼性の高いオプションは、ログイン成功が発生したときに、ユーザーのセッションでタイムスタンプを保存するために、あなたのSpring Security filter chainをカスタマイズすることになります。次に、セッション属性にアクセスするのと同じ方法でアクセスします。

1

ドキュメントによれば、Spring Securityフィルタチェーンのadd your own filtersにアクセスできます。
http/form-loginBasicAuthenticationFilterの場合はhttp/http-basicの場合はフィルタを追加することができますので、セッションが既に作成されていることを保証します。
両方をカバーするには、最後のフィルターの後ろにフィルターを追加し、その情報をセッションに追加します。

あなたのフィルタ-Beanを宣言します。

<bean id="myFilter" class="com.MyFilter"/> 

は右BasicAuthenticationFilter後、チェーンに追加します:

<http> 
    <custom-filter ref="myFilter" after="BASIC_AUTH_FILTER"/> 
    ... 

あなたdoFilter方法は次のようになります。

private static final String LOGGED_TIME_KEY = "LOGGED_TIME"; 

@Override 
public void doFilter(ServletRequest req, ServletResponse res, 
     FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
    if (authentication != null && authentication.isAuthenticated()) { 
     HttpSession session = request.getSession(false); 
     if (session != null && session.getAttribute(LOGGED_TIME_KEY) == null) { 
      session.setAttribute(LOGGED_TIME_KEY, new Date()); 
     } 
    } 
    chain.doFilter(req, res); 
} 

他のフックを使用することができます。 AuthenticationProviderにも追加できます。

EDIT:

あなたがform-loginを使用している場合は、それを行うための簡単な方法があります。
カスタムはAuthenticationSuccessHandlerです。定義するには、form-loginタグを更新し、属性authentication-success-handler-refを追加してください。

関連する問題