|
|
@@ -158,12 +158,13 @@ public class TokenBasedRememberMeServices extends AbstractRememberMeServices {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- long expiryTime = System.currentTimeMillis() + getTokenValiditySeconds() * 1000;
|
|
|
+ int tokenLifetime = calculateLoginLifetime(request, successfulAuthentication);
|
|
|
+ long expiryTime = System.currentTimeMillis() + 1000*tokenLifetime;
|
|
|
|
|
|
- String signatureValue = makeTokenSignature(expiryTime, username, password);
|
|
|
+ String signatureValue = makeTokenSignature(expiryTime, username, password);
|
|
|
String cookieValue = encodeCookie(new String[] {username, Long.toString(expiryTime), signatureValue});
|
|
|
|
|
|
- response.addCookie(makeValidCookie(cookieValue, request, getTokenValiditySeconds()));
|
|
|
+ response.addCookie(makeValidCookie(cookieValue, request, tokenLifetime));
|
|
|
|
|
|
if (logger.isDebugEnabled()) {
|
|
|
logger.debug("Added remember-me cookie for user '" + username + "', expiry: '"
|
|
|
@@ -171,7 +172,28 @@ public class TokenBasedRememberMeServices extends AbstractRememberMeServices {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- protected String retrieveUserName(Authentication authentication) {
|
|
|
+ /**
|
|
|
+ * Calculates the validity period in seconds for a newly generated remember-me login.
|
|
|
+ * After this period (from the current time) the remember-me login will be considered expired.
|
|
|
+ * This method allows customization based on request parameters supplied with the login or information in
|
|
|
+ * the <tt>Authentication</tt> object. The default value is just the token validity period property,
|
|
|
+ * <tt>tokenValiditySeconds</tt>.
|
|
|
+ * <p>
|
|
|
+ * The returned value will be used to work out the expiry time of the token and will also be
|
|
|
+ * used to set the <tt>maxAge</tt> property of the cookie.
|
|
|
+ * </p>
|
|
|
+ *
|
|
|
+ * See SEC-485.
|
|
|
+ *
|
|
|
+ * @param request the request passed to onLoginSuccess
|
|
|
+ * @param authentication the successful authentication object.
|
|
|
+ * @return the lifetime in seconds.
|
|
|
+ */
|
|
|
+ protected int calculateLoginLifetime(HttpServletRequest request, Authentication authentication) {
|
|
|
+ return getTokenValiditySeconds();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected String retrieveUserName(Authentication authentication) {
|
|
|
if (isInstanceOfUserDetails(authentication)) {
|
|
|
return ((UserDetails) authentication.getPrincipal()).getUsername();
|
|
|
}
|