v1.3 RC
This commit is contained in:
@@ -2,11 +2,9 @@ package org.maxkey.authn.support.rememberme;
|
|||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
import javax.servlet.http.Cookie;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.maxkey.config.ApplicationConfig;
|
import org.maxkey.config.ApplicationConfig;
|
||||||
import org.maxkey.constants.LOGINTYPE;
|
import org.maxkey.constants.LOGINTYPE;
|
||||||
@@ -42,7 +40,8 @@ public abstract class AbstractRemeberMeService {
|
|||||||
// end persist
|
// end persist
|
||||||
|
|
||||||
public boolean createRemeberMe(String username, HttpServletRequest request, HttpServletResponse response) {
|
public boolean createRemeberMe(String username, HttpServletRequest request, HttpServletResponse response) {
|
||||||
if(request.getSession().getAttribute(WebConstants.REMEBER_ME_SESSION)!=null&&applicationConfig.getLoginConfig().isRemeberMe()){
|
if (request.getSession().getAttribute(WebConstants.REMEBER_ME_SESSION) != null
|
||||||
|
&& applicationConfig.getLoginConfig().isRemeberMe()) {
|
||||||
_logger.debug("Remeber Me ...");
|
_logger.debug("Remeber Me ...");
|
||||||
RemeberMe remeberMe = new RemeberMe();
|
RemeberMe remeberMe = new RemeberMe();
|
||||||
remeberMe.setAuthKey(WebContext.genId());
|
remeberMe.setAuthKey(WebContext.genId());
|
||||||
@@ -53,7 +52,6 @@ public abstract class AbstractRemeberMeService {
|
|||||||
_logger.debug("Remeber Me " + remeberMe);
|
_logger.debug("Remeber Me " + remeberMe);
|
||||||
_logger.debug("Cookie Name : " + WebConstants.REMEBER_ME_COOKIE);
|
_logger.debug("Cookie Name : " + WebConstants.REMEBER_ME_COOKIE);
|
||||||
|
|
||||||
|
|
||||||
String jsonRemeberMe = JsonUtils.object2Json(remeberMe);
|
String jsonRemeberMe = JsonUtils.object2Json(remeberMe);
|
||||||
_logger.debug("Remeber Me JSON " + jsonRemeberMe);
|
_logger.debug("Remeber Me JSON " + jsonRemeberMe);
|
||||||
|
|
||||||
@@ -76,7 +74,6 @@ public abstract class AbstractRemeberMeService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean login(String remeberMe, HttpServletResponse response) {
|
public boolean login(String remeberMe, HttpServletResponse response) {
|
||||||
_logger.debug("RemeberMe : " + remeberMe);
|
_logger.debug("RemeberMe : " + remeberMe);
|
||||||
|
|
||||||
@@ -101,7 +98,6 @@ public abstract class AbstractRemeberMeService {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public boolean updateRemeberMe(RemeberMe remeberMe, HttpServletResponse response) {
|
public boolean updateRemeberMe(RemeberMe remeberMe, HttpServletResponse response) {
|
||||||
remeberMe.setAuthKey(WebContext.genId());
|
remeberMe.setAuthKey(WebContext.genId());
|
||||||
remeberMe.setLastLogin(new Date());
|
remeberMe.setLastLogin(new Date());
|
||||||
@@ -109,7 +105,6 @@ public abstract class AbstractRemeberMeService {
|
|||||||
_logger.debug("update Remeber Me " + remeberMe);
|
_logger.debug("update Remeber Me " + remeberMe);
|
||||||
_logger.debug("Cookie Name : " + WebConstants.REMEBER_ME_COOKIE);
|
_logger.debug("Cookie Name : " + WebConstants.REMEBER_ME_COOKIE);
|
||||||
|
|
||||||
|
|
||||||
String jsonRemeberMe = JsonUtils.object2Json(remeberMe);
|
String jsonRemeberMe = JsonUtils.object2Json(remeberMe);
|
||||||
_logger.debug("Remeber Me JSON " + jsonRemeberMe);
|
_logger.debug("Remeber Me JSON " + jsonRemeberMe);
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,28 +4,29 @@ import java.sql.ResultSet;
|
|||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Types;
|
import java.sql.Types;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.jdbc.core.RowMapper;
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
|
||||||
|
|
||||||
public class JdbcRemeberMeService extends AbstractRemeberMeService {
|
public class JdbcRemeberMeService extends AbstractRemeberMeService {
|
||||||
private static final Logger _logger = LoggerFactory.getLogger(JdbcRemeberMeService.class);
|
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_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_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_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) {
|
public JdbcRemeberMeService(JdbcTemplate jdbcTemplate) {
|
||||||
this.jdbcTemplate = jdbcTemplate;
|
this.jdbcTemplate = jdbcTemplate;
|
||||||
}
|
}
|
||||||
@@ -33,20 +34,25 @@ public class JdbcRemeberMeService extends AbstractRemeberMeService{
|
|||||||
@Override
|
@Override
|
||||||
public void save(RemeberMe remeberMe) {
|
public void save(RemeberMe remeberMe) {
|
||||||
jdbcTemplate.update(DEFAULT_DEFAULT_INSERT_STATEMENT,
|
jdbcTemplate.update(DEFAULT_DEFAULT_INSERT_STATEMENT,
|
||||||
new Object[] { remeberMe.getId(),remeberMe.getUsername(),remeberMe.getAuthKey(),remeberMe.getLastLogin() },
|
new Object[] { remeberMe.getId(), remeberMe.getUsername(), remeberMe.getAuthKey(),
|
||||||
|
remeberMe.getLastLogin() },
|
||||||
new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP });
|
new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP });
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(RemeberMe remeberMe) {
|
public void update(RemeberMe remeberMe) {
|
||||||
jdbcTemplate.update(DEFAULT_DEFAULT_UPDATE_STATEMENT, new Object[] {remeberMe.getAuthKey(),remeberMe.getLastLogin(),remeberMe.getId()});
|
jdbcTemplate.update(DEFAULT_DEFAULT_UPDATE_STATEMENT,
|
||||||
|
new Object[] {
|
||||||
|
remeberMe.getAuthKey(),
|
||||||
|
remeberMe.getLastLogin(),
|
||||||
|
remeberMe.getId()
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RemeberMe read(RemeberMe remeberMe) {
|
public RemeberMe read(RemeberMe remeberMe) {
|
||||||
List<RemeberMe> listRemeberMe=jdbcTemplate.query(DEFAULT_DEFAULT_SELECT_STATEMENT, new RowMapper<RemeberMe>() {
|
List<RemeberMe> listRemeberMe = jdbcTemplate.query(DEFAULT_DEFAULT_SELECT_STATEMENT,
|
||||||
|
new RowMapper<RemeberMe>() {
|
||||||
public RemeberMe mapRow(ResultSet rs, int rowNum) throws SQLException {
|
public RemeberMe mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||||
RemeberMe remeberMe = new RemeberMe();
|
RemeberMe remeberMe = new RemeberMe();
|
||||||
remeberMe.setId(rs.getString(1));
|
remeberMe.setId(rs.getString(1));
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,8 +1,12 @@
|
|||||||
package org.maxkey.authn.support.rememberme;
|
package org.maxkey.authn.support.rememberme;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
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).
|
* The number of seconds in one year (= 60 * 60 * 24 * 365).
|
||||||
*/
|
*/
|
||||||
@@ -58,7 +62,9 @@ public class RemeberMe {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "RemeberMe [id=" + id + ", username=" + username + ", authKey="
|
return "RemeberMe [id=" + id
|
||||||
+ authKey + ", lastLogin=" + lastLogin + "]";
|
+ ", username=" + username
|
||||||
|
+ ", authKey=" + authKey + ", lastLogin=" + lastLogin
|
||||||
|
+ "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,10 +72,14 @@
|
|||||||
|
|
||||||
<ref bean="localeChangeInterceptor" />
|
<ref bean="localeChangeInterceptor" />
|
||||||
</mvc:interceptors>
|
</mvc:interceptors>
|
||||||
|
<!--
|
||||||
<bean id="remeberMeService" class="org.maxkey.authn.support.rememberme.JdbcRemeberMeService">
|
<bean id="remeberMeService" class="org.maxkey.authn.support.rememberme.JdbcRemeberMeService">
|
||||||
<constructor-arg ref="jdbcTemplate"/>
|
<constructor-arg ref="jdbcTemplate"/>
|
||||||
<property name="validity" value="${config.login.remeberme.validity}"/>
|
<property name="validity" value="${config.login.remeberme.validity}"/>
|
||||||
|
</bean>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<bean id="remeberMeService" class="org.maxkey.authn.support.rememberme.InMemoryRemeberMeService">
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
<bean id="keyUriFormat" class="org.maxkey.crypto.password.opt.algorithm.KeyUriFormat">
|
<bean id="keyUriFormat" class="org.maxkey.crypto.password.opt.algorithm.KeyUriFormat">
|
||||||
|
|||||||
Reference in New Issue
Block a user