私は春のセキュリティ3を使用して、現在のセッションにログインした時間を表示したいと思います。どのように私は春のセキュリティを使用中にログインすることができます
スプリングセキュリティはそのようなトークンを提供しますか?
おかげで、 - Akshay
私は春のセキュリティ3を使用して、現在のセッションにログインした時間を表示したいと思います。どのように私は春のセキュリティを使用中にログインすることができます
スプリングセキュリティはそのようなトークンを提供しますか?
おかげで、 - Akshay
は、最も信頼性の高いオプションは、ログイン成功が発生したときに、ユーザーのセッションでタイムスタンプを保存するために、あなたのSpring Security filter chainをカスタマイズすることになります。次に、セッション属性にアクセスするのと同じ方法でアクセスします。
ドキュメントによれば、Spring Securityフィルタチェーンのadd your own filtersにアクセスできます。
、http/form-login
、BasicAuthenticationFilter
の場合は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
を追加してください。