|  | @@ -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();
 | 
	
		
			
				|  |  |  		}
 |