shimingxy 5 роки тому
батько
коміт
65deab6676

+ 153 - 158
maxkey-core/src/main/java/org/maxkey/authn/support/rememberme/AbstractRemeberMeService.java

@@ -2,11 +2,9 @@ package org.maxkey.authn.support.rememberme;
 
 import java.util.Date;
 import java.util.regex.Pattern;
-
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
 import org.joda.time.DateTime;
 import org.maxkey.config.ApplicationConfig;
 import org.maxkey.constants.LOGINTYPE;
@@ -20,160 +18,157 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 
-public  abstract  class AbstractRemeberMeService {
-	private static final Logger _logger = LoggerFactory.getLogger(AbstractRemeberMeService.class);
-	
-	protected Integer remeberMeValidity=RemeberMe.TWO_WEEK;
-	
-	protected String validity;
-
-	@Autowired
-	@Qualifier("applicationConfig")
-  	protected ApplicationConfig applicationConfig;
-	
-	//follow function is for persist
-	public abstract void save(RemeberMe remeberMe) ;
-	
-	public abstract  void update(RemeberMe remeberMe) ;
-	
-	public abstract  RemeberMe read(RemeberMe remeberMe) ;
-	
-	public abstract  void remove(String username); 
-	//end persist
-	
-	public boolean createRemeberMe(String username,HttpServletRequest request, HttpServletResponse response){
-		if(request.getSession().getAttribute(WebConstants.REMEBER_ME_SESSION)!=null&&applicationConfig.getLoginConfig().isRemeberMe()){
-			_logger.debug("Remeber Me ...");
-			RemeberMe remeberMe=new RemeberMe();
-	    	remeberMe.setAuthKey(WebContext.genId());
-	    	remeberMe.setId(WebContext.genId());
-	    	remeberMe.setUsername(WebContext.getUserInfo().getUsername());
-	    	remeberMe.setLastLogin(new Date());
-	    	save(remeberMe);
-	    	_logger.debug("Remeber Me "+remeberMe);
-	    	_logger.debug("Cookie Name : "+WebConstants.REMEBER_ME_COOKIE);
-			
-			
-	    	String jsonRemeberMe=JsonUtils.object2Json(remeberMe);
-	    	_logger.debug("Remeber Me JSON "+jsonRemeberMe);
-	    	
-	    	jsonRemeberMe=ReciprocalUtils.encode(jsonRemeberMe);
-	    	
-			String cookieValue = Base64Utils.base64UrlEncode(jsonRemeberMe.getBytes());
-			
-			_logger.debug("Remeber Me JSON "+cookieValue);
-			Cookie cookie= new Cookie(WebConstants.REMEBER_ME_COOKIE,cookieValue);
-			
-			Integer maxAge=getRemeberMeValidity();
-			_logger.debug("Cookie Max Age :"+maxAge+" seconds.");
-			cookie.setMaxAge(maxAge);
-			
-			//cookie.setPath("/");
-			cookie.setDomain(applicationConfig.getDomainName());
-			response.addCookie(cookie);
-			request.getSession().removeAttribute(WebConstants.REMEBER_ME_SESSION);
-		}
-		return true;
-	}
-	
-	
-	public boolean login(String remeberMe, HttpServletResponse response){
- 		_logger.debug("RemeberMe : "+remeberMe);
-
-		remeberMe=new String(Base64Utils.base64UrlDecode(remeberMe));
-		
-		remeberMe=ReciprocalUtils.decoder(remeberMe);
-		
-		_logger.debug("decoder RemeberMe : "+remeberMe);
-		RemeberMe remeberMeCookie=new RemeberMe();
-		remeberMeCookie=(RemeberMe)JsonUtils.json2Object(remeberMe, remeberMeCookie);
-		_logger.debug("Remeber Me Cookie : "+remeberMeCookie);
-		
-		RemeberMe jdbcRemeberMe=read(remeberMeCookie);
-		DateTime loginDate=new DateTime(jdbcRemeberMe.getLastLogin());
-		DateTime expiryDate = loginDate.plusSeconds(getRemeberMeValidity());
-		DateTime now = new DateTime();
-		if(now.isBefore(expiryDate)){
-	    	if(WebContext.setAuthentication(jdbcRemeberMe.getUsername(),LOGINTYPE.REMEBER_ME,"","","success")){
-	    		return updateRemeberMe(remeberMeCookie,response);
-	    	}
-		}
-    	return false;
- 	}
-	
-	
-	public boolean updateRemeberMe(RemeberMe remeberMe,HttpServletResponse response){
- 		remeberMe.setAuthKey(WebContext.genId());
-    	remeberMe.setLastLogin(new Date());
-    	update(remeberMe);
-    	_logger.debug("update Remeber Me "+remeberMe);
-    	_logger.debug("Cookie Name : "+WebConstants.REMEBER_ME_COOKIE);
-		
-		
-    	String jsonRemeberMe=JsonUtils.object2Json(remeberMe);
-    	_logger.debug("Remeber Me JSON "+jsonRemeberMe);
-
-    	_logger.debug("Encode Remeber Me JSON ...");
-    	jsonRemeberMe=ReciprocalUtils.encode(jsonRemeberMe);
-    	_logger.debug("Encode Remeber Me JSON "+ jsonRemeberMe);
-    	
-		String cookieValue = Base64Utils.base64UrlEncode(jsonRemeberMe.getBytes());
-		
-		Cookie cookie= new Cookie(WebConstants.REMEBER_ME_COOKIE,cookieValue);
-		
-		Integer maxAge=getRemeberMeValidity();
-		_logger.debug("Cookie Max Age :"+maxAge+" seconds.");
-		cookie.setMaxAge(maxAge);
-		
-		//cookie.setPath("/");
-		cookie.setDomain(applicationConfig.getDomainName());
-		response.addCookie(cookie);
-		return true;
- 	}
-	
-	public boolean removeRemeberMe(HttpServletResponse response){
-		Cookie cookie= new Cookie(WebConstants.REMEBER_ME_COOKIE,null);
- 		cookie.setMaxAge(0);
-		
-		cookie.setDomain(applicationConfig.getDomainName());
-		response.addCookie(cookie);
-		
-		remove(WebContext.getUserInfo().getUsername());
-		
-		return true;
-	}
-	
-	public Integer getRemeberMeValidity() {
-		return remeberMeValidity;
-	}
-
-	public void setRemeberMeValidity(Integer remeberMeValidity) {
-		this.remeberMeValidity = remeberMeValidity;
-	}
-
-	public String getValidity() {
-		return validity;
-	}
-	
-	public void setApplicationConfig(ApplicationConfig applicationConfig) {
-		this.applicationConfig = applicationConfig;
-	}
-
-	public void setValidity(String validity) {
-		_logger.debug("validity : "+validity);
-		this.validity = validity;
-		if(Pattern.matches("[0-9]+", validity)){
-			remeberMeValidity=Integer.parseInt(validity);
-		}else if(validity.equalsIgnoreCase("ONE_DAY")){
-			remeberMeValidity=RemeberMe.ONE_DAY;
-		}else if(validity.equalsIgnoreCase("ONE_WEEK")){
-			remeberMeValidity=RemeberMe.ONE_WEEK;
-		}else if(validity.equalsIgnoreCase("TWO_WEEK")){
-			remeberMeValidity=RemeberMe.TWO_WEEK;
-		}else if(validity.equalsIgnoreCase("ONE_YEAR")){
-			remeberMeValidity=RemeberMe.ONE_YEAR;
-		}
-		
-		_logger.debug("Remeber Me Validity : "+remeberMeValidity);
-	}
+public abstract class AbstractRemeberMeService {
+    private static final Logger _logger = LoggerFactory.getLogger(AbstractRemeberMeService.class);
+
+    protected Integer remeberMeValidity = RemeberMe.TWO_WEEK;
+
+    protected String validity;
+
+    @Autowired
+    @Qualifier("applicationConfig")
+    protected ApplicationConfig applicationConfig;
+
+    // follow function is for persist
+    public abstract void save(RemeberMe remeberMe);
+
+    public abstract void update(RemeberMe remeberMe);
+
+    public abstract RemeberMe read(RemeberMe remeberMe);
+
+    public abstract void remove(String username);
+    // end persist
+
+    public boolean createRemeberMe(String username, HttpServletRequest request, HttpServletResponse response) {
+        if (request.getSession().getAttribute(WebConstants.REMEBER_ME_SESSION) != null
+                && applicationConfig.getLoginConfig().isRemeberMe()) {
+            _logger.debug("Remeber Me ...");
+            RemeberMe remeberMe = new RemeberMe();
+            remeberMe.setAuthKey(WebContext.genId());
+            remeberMe.setId(WebContext.genId());
+            remeberMe.setUsername(WebContext.getUserInfo().getUsername());
+            remeberMe.setLastLogin(new Date());
+            save(remeberMe);
+            _logger.debug("Remeber Me " + remeberMe);
+            _logger.debug("Cookie Name : " + WebConstants.REMEBER_ME_COOKIE);
+
+            String jsonRemeberMe = JsonUtils.object2Json(remeberMe);
+            _logger.debug("Remeber Me JSON " + jsonRemeberMe);
+
+            jsonRemeberMe = ReciprocalUtils.encode(jsonRemeberMe);
+
+            String cookieValue = Base64Utils.base64UrlEncode(jsonRemeberMe.getBytes());
+
+            _logger.debug("Remeber Me JSON " + cookieValue);
+            Cookie cookie = new Cookie(WebConstants.REMEBER_ME_COOKIE, cookieValue);
+
+            Integer maxAge = getRemeberMeValidity();
+            _logger.debug("Cookie Max Age :" + maxAge + " seconds.");
+            cookie.setMaxAge(maxAge);
+
+            // cookie.setPath("/");
+            cookie.setDomain(applicationConfig.getDomainName());
+            response.addCookie(cookie);
+            request.getSession().removeAttribute(WebConstants.REMEBER_ME_SESSION);
+        }
+        return true;
+    }
+
+    public boolean login(String remeberMe, HttpServletResponse response) {
+        _logger.debug("RemeberMe : " + remeberMe);
+
+        remeberMe = new String(Base64Utils.base64UrlDecode(remeberMe));
+
+        remeberMe = ReciprocalUtils.decoder(remeberMe);
+
+        _logger.debug("decoder RemeberMe : " + remeberMe);
+        RemeberMe remeberMeCookie = new RemeberMe();
+        remeberMeCookie = (RemeberMe) JsonUtils.json2Object(remeberMe, remeberMeCookie);
+        _logger.debug("Remeber Me Cookie : " + remeberMeCookie);
+
+        RemeberMe jdbcRemeberMe = read(remeberMeCookie);
+        DateTime loginDate = new DateTime(jdbcRemeberMe.getLastLogin());
+        DateTime expiryDate = loginDate.plusSeconds(getRemeberMeValidity());
+        DateTime now = new DateTime();
+        if (now.isBefore(expiryDate)) {
+            if (WebContext.setAuthentication(jdbcRemeberMe.getUsername(), LOGINTYPE.REMEBER_ME, "", "", "success")) {
+                return updateRemeberMe(remeberMeCookie, response);
+            }
+        }
+        return false;
+    }
+
+    public boolean updateRemeberMe(RemeberMe remeberMe, HttpServletResponse response) {
+        remeberMe.setAuthKey(WebContext.genId());
+        remeberMe.setLastLogin(new Date());
+        update(remeberMe);
+        _logger.debug("update Remeber Me " + remeberMe);
+        _logger.debug("Cookie Name : " + WebConstants.REMEBER_ME_COOKIE);
+
+        String jsonRemeberMe = JsonUtils.object2Json(remeberMe);
+        _logger.debug("Remeber Me JSON " + jsonRemeberMe);
+
+        _logger.debug("Encode Remeber Me JSON ...");
+        jsonRemeberMe = ReciprocalUtils.encode(jsonRemeberMe);
+        _logger.debug("Encode Remeber Me JSON " + jsonRemeberMe);
+
+        String cookieValue = Base64Utils.base64UrlEncode(jsonRemeberMe.getBytes());
+
+        Cookie cookie = new Cookie(WebConstants.REMEBER_ME_COOKIE, cookieValue);
+
+        Integer maxAge = getRemeberMeValidity();
+        _logger.debug("Cookie Max Age :" + maxAge + " seconds.");
+        cookie.setMaxAge(maxAge);
+
+        // cookie.setPath("/");
+        cookie.setDomain(applicationConfig.getDomainName());
+        response.addCookie(cookie);
+        return true;
+    }
+
+    public boolean removeRemeberMe(HttpServletResponse response) {
+        Cookie cookie = new Cookie(WebConstants.REMEBER_ME_COOKIE, null);
+        cookie.setMaxAge(0);
+
+        cookie.setDomain(applicationConfig.getDomainName());
+        response.addCookie(cookie);
+
+        remove(WebContext.getUserInfo().getUsername());
+
+        return true;
+    }
+
+    public Integer getRemeberMeValidity() {
+        return remeberMeValidity;
+    }
+
+    public void setRemeberMeValidity(Integer remeberMeValidity) {
+        this.remeberMeValidity = remeberMeValidity;
+    }
+
+    public String getValidity() {
+        return validity;
+    }
+
+    public void setApplicationConfig(ApplicationConfig applicationConfig) {
+        this.applicationConfig = applicationConfig;
+    }
+
+    public void setValidity(String validity) {
+        _logger.debug("validity : " + validity);
+        this.validity = validity;
+        if (Pattern.matches("[0-9]+", validity)) {
+            remeberMeValidity = Integer.parseInt(validity);
+        } else if (validity.equalsIgnoreCase("ONE_DAY")) {
+            remeberMeValidity = RemeberMe.ONE_DAY;
+        } else if (validity.equalsIgnoreCase("ONE_WEEK")) {
+            remeberMeValidity = RemeberMe.ONE_WEEK;
+        } else if (validity.equalsIgnoreCase("TWO_WEEK")) {
+            remeberMeValidity = RemeberMe.TWO_WEEK;
+        } else if (validity.equalsIgnoreCase("ONE_YEAR")) {
+            remeberMeValidity = RemeberMe.ONE_YEAR;
+        }
+
+        _logger.debug("Remeber Me Validity : " + remeberMeValidity);
+    }
 }

+ 39 - 0
maxkey-core/src/main/java/org/maxkey/authn/support/rememberme/InMemoryRemeberMeService.java

@@ -0,0 +1,39 @@
+package org.maxkey.authn.support.rememberme;
+
+import java.time.Duration;
+import org.ehcache.UserManagedCache;
+import org.ehcache.config.builders.ExpiryPolicyBuilder;
+import org.ehcache.config.builders.UserManagedCacheBuilder;
+
+public class InMemoryRemeberMeService   extends AbstractRemeberMeService {
+
+    protected static final UserManagedCache<String, RemeberMe> remeberMeStore = 
+            UserManagedCacheBuilder.newUserManagedCacheBuilder(String.class, RemeberMe.class)
+                .withExpiry(
+                    ExpiryPolicyBuilder.timeToLiveExpiration(
+                        Duration.ofMinutes(RemeberMe.TWO_WEEK)
+                    )
+                )
+                .build(true);
+    
+    @Override
+    public void save(RemeberMe remeberMe) {
+        remeberMeStore.put(remeberMe.getUsername(), remeberMe);
+    }
+
+    @Override
+    public void update(RemeberMe remeberMe) {
+        remeberMeStore.put(remeberMe.getUsername(), remeberMe);
+    }
+
+    @Override
+    public RemeberMe read(RemeberMe remeberMe) {
+        return remeberMeStore.get(remeberMe.getUsername());
+    }
+
+    @Override
+    public void remove(String username) {
+        remeberMeStore.remove(username);
+    }
+
+}

+ 54 - 48
maxkey-core/src/main/java/org/maxkey/authn/support/rememberme/JdbcRemeberMeService.java

@@ -4,65 +4,71 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Types;
 import java.util.List;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
 
+public class JdbcRemeberMeService extends AbstractRemeberMeService {
+    private static final Logger _logger = LoggerFactory.getLogger(JdbcRemeberMeService.class);
+
+    private static final String DEFAULT_DEFAULT_INSERT_STATEMENT = 
+            "INSERT INTO  REMEMBER_ME(ID, USERNAME,AUTHKEY,LASTLOGIN)VALUES( ? , ? , ? , ?)";
+
+    private static final String DEFAULT_DEFAULT_SELECT_STATEMENT = 
+            "SELECT ID, USERNAME,AUTHKEY,LASTLOGIN  FROM REMEMBER_ME " 
+                    + " WHERE ID = ?  AND USERNAME = ? AND AUTHKEY = ?";
+
+    private static final String DEFAULT_DEFAULT_DELETE_STATEMENT = 
+            "DELETE FROM  REMEMBER_ME WHERE  USERNAME = ?";
 
-public class JdbcRemeberMeService  extends AbstractRemeberMeService{
-	private static final Logger _logger = LoggerFactory.getLogger(JdbcRemeberMeService.class);
-	
-	private static final String DEFAULT_DEFAULT_INSERT_STATEMENT = "INSERT INTO  REMEMBER_ME(ID, USERNAME,AUTHKEY,LASTLOGIN)VALUES( ? , ? , ? , ?)";
-	
-	private static final String DEFAULT_DEFAULT_SELECT_STATEMENT = "SELECT ID, USERNAME,AUTHKEY,LASTLOGIN  FROM REMEMBER_ME WHERE ID = ?  AND USERNAME = ? AND AUTHKEY = ?";
-	
-	private static final String DEFAULT_DEFAULT_DELETE_STATEMENT = "DELETE FROM  REMEMBER_ME WHERE  USERNAME = ?";
-	
-	private static final String  DEFAULT_DEFAULT_UPDATE_STATEMENT= "UPDATE REMEMBER_ME  SET AUTHKEY  = ? , LASTLOGIN = ?  WHERE ID = ?";
+    private static final String DEFAULT_DEFAULT_UPDATE_STATEMENT = 
+            "UPDATE REMEMBER_ME  SET AUTHKEY  = ? , LASTLOGIN = ?  WHERE ID = ?";
 
-	private final JdbcTemplate jdbcTemplate;
-	
+    private final JdbcTemplate jdbcTemplate;
 
-	
-	public JdbcRemeberMeService(JdbcTemplate jdbcTemplate) {
-		this.jdbcTemplate = jdbcTemplate;
-	}
+    public JdbcRemeberMeService(JdbcTemplate jdbcTemplate) {
+        this.jdbcTemplate = jdbcTemplate;
+    }
 
-	@Override
-	public void save(RemeberMe remeberMe) {
-		jdbcTemplate.update(DEFAULT_DEFAULT_INSERT_STATEMENT, 
-				new Object[] { remeberMe.getId(),remeberMe.getUsername(),remeberMe.getAuthKey(),remeberMe.getLastLogin()  },
-				new int[] {Types.VARCHAR, Types.VARCHAR,Types.VARCHAR,Types.TIMESTAMP });
-		
-	}
+    @Override
+    public void save(RemeberMe remeberMe) {
+        jdbcTemplate.update(DEFAULT_DEFAULT_INSERT_STATEMENT,
+                new Object[] { remeberMe.getId(), remeberMe.getUsername(), remeberMe.getAuthKey(),
+                        remeberMe.getLastLogin() },
+                new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP });
+    }
 
-	@Override
-	public void update(RemeberMe remeberMe) {
-		jdbcTemplate.update(DEFAULT_DEFAULT_UPDATE_STATEMENT, new Object[] {remeberMe.getAuthKey(),remeberMe.getLastLogin(),remeberMe.getId()});
-		
-	}
+    @Override
+    public void update(RemeberMe remeberMe) {
+        jdbcTemplate.update(DEFAULT_DEFAULT_UPDATE_STATEMENT,
+                new Object[] { 
+                        remeberMe.getAuthKey(), 
+                        remeberMe.getLastLogin(), 
+                        remeberMe.getId() 
+                });
+    }
 
-	@Override
-	public RemeberMe read(RemeberMe remeberMe) {
-		List<RemeberMe> listRemeberMe=jdbcTemplate.query(DEFAULT_DEFAULT_SELECT_STATEMENT, new RowMapper<RemeberMe>() {
-			public RemeberMe mapRow(ResultSet rs, int rowNum) throws SQLException {
-				RemeberMe remeberMe=new RemeberMe();
-				remeberMe.setId(rs.getString(1));
-				remeberMe.setUsername(rs.getString(2));
-				remeberMe.setAuthKey(rs.getString(3));
-				remeberMe.setLastLogin(rs.getDate(4));
-				return remeberMe;
-			}
-		},remeberMe.getId(),remeberMe.getUsername(),remeberMe.getAuthKey());
-		_logger.debug("listRemeberMe "+listRemeberMe);
-		return (listRemeberMe.size()>0)?listRemeberMe.get(0):null;
-	}
+    @Override
+    public RemeberMe read(RemeberMe remeberMe) {
+        List<RemeberMe> listRemeberMe = jdbcTemplate.query(DEFAULT_DEFAULT_SELECT_STATEMENT,
+                new RowMapper<RemeberMe>() {
+                    public RemeberMe mapRow(ResultSet rs, int rowNum) throws SQLException {
+                        RemeberMe remeberMe = new RemeberMe();
+                        remeberMe.setId(rs.getString(1));
+                        remeberMe.setUsername(rs.getString(2));
+                        remeberMe.setAuthKey(rs.getString(3));
+                        remeberMe.setLastLogin(rs.getDate(4));
+                        return remeberMe;
+                    }
+                }, remeberMe.getId(), remeberMe.getUsername(), remeberMe.getAuthKey());
+        _logger.debug("listRemeberMe " + listRemeberMe);
+        return (listRemeberMe.size() > 0) ? listRemeberMe.get(0) : null;
+    }
 
-	@Override
-	public void remove(String username) {
-		jdbcTemplate.update(DEFAULT_DEFAULT_DELETE_STATEMENT, username);
-	}
+    @Override
+    public void remove(String username) {
+        jdbcTemplate.update(DEFAULT_DEFAULT_DELETE_STATEMENT, username);
+    }
 
 }

+ 43 - 0
maxkey-core/src/main/java/org/maxkey/authn/support/rememberme/RedisRemeberMeService.java

@@ -0,0 +1,43 @@
+package org.maxkey.authn.support.rememberme;
+
+import org.maxkey.persistence.redis.RedisConnection;
+import org.maxkey.persistence.redis.RedisConnectionFactory;
+
+public class RedisRemeberMeService extends AbstractRemeberMeService {
+
+    protected int serviceTicketValiditySeconds = RemeberMe.TWO_WEEK;
+    
+    RedisConnectionFactory connectionFactory;
+    
+    public static String PREFIX = "REDIS_REMEBER_ME_SERVICE_";
+    
+    @Override
+    public void save(RemeberMe remeberMe) {
+        RedisConnection conn = connectionFactory.getConnection();
+        conn.setexObject(PREFIX + remeberMe.getUsername(), serviceTicketValiditySeconds, remeberMe);
+        conn.close();
+    }
+
+    @Override
+    public void update(RemeberMe remeberMe) {
+        RedisConnection conn = connectionFactory.getConnection();
+        conn.setexObject(PREFIX + remeberMe.getUsername(), serviceTicketValiditySeconds, remeberMe);
+        conn.close();
+    }
+
+    @Override
+    public RemeberMe read(RemeberMe remeberMe) {
+        RedisConnection conn = connectionFactory.getConnection();
+        RemeberMe readRemeberMe = (RemeberMe)conn.getObject(PREFIX + remeberMe.getUsername());
+        conn.close();
+        return readRemeberMe;
+    }
+
+    @Override
+    public void remove(String username) {
+        RedisConnection conn = connectionFactory.getConnection();
+        conn.delete(PREFIX + username);
+        conn.close();
+    }
+
+}

+ 49 - 43
maxkey-core/src/main/java/org/maxkey/authn/support/rememberme/RemeberMe.java

@@ -1,64 +1,70 @@
 package org.maxkey.authn.support.rememberme;
 
+import java.io.Serializable;
 import java.util.Date;
 
-public class RemeberMe {
-	 /**
+public class RemeberMe implements Serializable {
+
+    private static final long serialVersionUID = 8010496585233991785L;
+
+    /**
      * The number of seconds in one year (= 60 * 60 * 24 * 365).
      */
     public static final Integer ONE_YEAR = 60 * 60 * 24 * 365;
-    
-    public static final Integer ONE_DAY = 60	*	60	*	24; //1 day
-    
-    public static final Integer ONE_WEEK = ONE_DAY	*	7; //1 week
-    
-    public static final Integer TWO_WEEK = ONE_DAY	*	14; //2 week
-    
-    public static final Integer TWO_MONTH = ONE_DAY	*	30; //1 month
-    
+
+    public static final Integer ONE_DAY = 60 * 60 * 24; // 1 day
+
+    public static final Integer ONE_WEEK = ONE_DAY * 7; // 1 week
+
+    public static final Integer TWO_WEEK = ONE_DAY * 14; // 2 week
+
+    public static final Integer TWO_MONTH = ONE_DAY * 30; // 1 month
+
     String id;
-    
+
     String username;
-    
+
     String authKey;
-    
+
     Date lastLogin;
 
-	public String getId() {
-		return id;
-	}
+    public String getId() {
+        return id;
+    }
 
-	public void setId(String id) {
-		this.id = id;
-	}
+    public void setId(String id) {
+        this.id = id;
+    }
 
-	public String getUsername() {
-		return username;
-	}
+    public String getUsername() {
+        return username;
+    }
 
-	public void setUsername(String username) {
-		this.username = username;
-	}
+    public void setUsername(String username) {
+        this.username = username;
+    }
 
-	public String getAuthKey() {
-		return authKey;
-	}
+    public String getAuthKey() {
+        return authKey;
+    }
 
-	public void setAuthKey(String authKey) {
-		this.authKey = authKey;
-	}
+    public void setAuthKey(String authKey) {
+        this.authKey = authKey;
+    }
 
-	public Date getLastLogin() {
-		return lastLogin;
-	}
+    public Date getLastLogin() {
+        return lastLogin;
+    }
 
-	public void setLastLogin(Date lastLogin) {
-		this.lastLogin = lastLogin;
-	}
+    public void setLastLogin(Date lastLogin) {
+        this.lastLogin = lastLogin;
+    }
 
-	@Override
-	public String toString() {
-		return "RemeberMe [id=" + id + ", username=" + username + ", authKey="
-				+ authKey + ", lastLogin=" + lastLogin + "]";
-	}   
+    @Override
+    public String toString() {
+        return "RemeberMe [id=" + id 
+                + ", username=" + username 
+                + ", authKey=" + authKey + ", lastLogin=" + lastLogin
+                + "]";
+    }
 }

+ 5 - 1
maxkey-web-maxkey/src/main/resources/spring/maxkey-security.xml

@@ -72,11 +72,15 @@
 		
 		<ref bean="localeChangeInterceptor" />
 	</mvc:interceptors>
-     
+     <!--
 	<bean id="remeberMeService" class="org.maxkey.authn.support.rememberme.JdbcRemeberMeService">
 		<constructor-arg ref="jdbcTemplate"/>
 		<property name="validity" value="${config.login.remeberme.validity}"/>
 	</bean>
+	  -->
+	  
+	<bean id="remeberMeService" class="org.maxkey.authn.support.rememberme.InMemoryRemeberMeService">
+	</bean>
 	
 	<bean id="keyUriFormat" class="org.maxkey.crypto.password.opt.algorithm.KeyUriFormat">
 		<property name="type" value="totp" />