sessions
This commit is contained in:
+8
-8
@@ -20,9 +20,9 @@ package org.maxkey.authn;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.session.Session;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.authn.web.AuthorizationUtils;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.constants.ConstsLoginType;
|
||||
@@ -67,7 +67,7 @@ public abstract class AbstractAuthenticationProvider {
|
||||
|
||||
protected OtpAuthnService otpAuthnService;
|
||||
|
||||
protected OnlineTicketService onlineTicketServices;
|
||||
protected SessionService sessionService;
|
||||
|
||||
protected AuthJwtService authJwtService;
|
||||
|
||||
@@ -102,13 +102,13 @@ public abstract class AbstractAuthenticationProvider {
|
||||
*/
|
||||
public UsernamePasswordAuthenticationToken createOnlineTicket(LoginCredential credential,UserInfo userInfo) {
|
||||
//Online Tickit
|
||||
OnlineTicket onlineTicket = new OnlineTicket();
|
||||
Session onlineTicket = new Session();
|
||||
|
||||
userInfo.setOnlineTicket(onlineTicket.getTicketId());
|
||||
userInfo.setOnlineTicket(onlineTicket.getId());
|
||||
|
||||
SigninPrincipal principal = new SigninPrincipal(userInfo);
|
||||
//set OnlineTicket
|
||||
principal.setOnlineTicket(onlineTicket);
|
||||
principal.setSession(onlineTicket);
|
||||
ArrayList<GrantedAuthority> grantedAuthoritys = authenticationRealm.grantAuthority(userInfo);
|
||||
principal.setAuthenticated(true);
|
||||
|
||||
@@ -134,8 +134,8 @@ public abstract class AbstractAuthenticationProvider {
|
||||
|
||||
onlineTicket.setAuthentication(authenticationToken);
|
||||
|
||||
//store onlineTicket
|
||||
this.onlineTicketServices.store(onlineTicket.getTicketId(), onlineTicket);
|
||||
//store session
|
||||
this.sessionService.store(onlineTicket.getId(), onlineTicket);
|
||||
|
||||
/*
|
||||
* put Authentication to current session context
|
||||
|
||||
+7
-7
@@ -20,7 +20,7 @@ package org.maxkey.authn;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.session.Session;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
@@ -32,7 +32,7 @@ public class SigninPrincipal implements UserDetails {
|
||||
|
||||
UserDetails userDetails;
|
||||
|
||||
OnlineTicket onlineTicket;
|
||||
Session session;
|
||||
ArrayList<GrantedAuthority> grantedAuthority;
|
||||
ArrayList<GrantedAuthority> grantedAuthorityApps;
|
||||
boolean authenticated;
|
||||
@@ -109,12 +109,12 @@ public class SigninPrincipal implements UserDetails {
|
||||
this.grantedAuthority = grantedAuthority;
|
||||
}
|
||||
|
||||
public OnlineTicket getOnlineTicket() {
|
||||
return onlineTicket;
|
||||
public Session getSession() {
|
||||
return session;
|
||||
}
|
||||
|
||||
public void setOnlineTicket(OnlineTicket onlineTicket) {
|
||||
this.onlineTicket = onlineTicket;
|
||||
public void setSession(Session session) {
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
public boolean isRoleAdministrators() {
|
||||
@@ -178,7 +178,7 @@ public class SigninPrincipal implements UserDetails {
|
||||
builder.append("SigninPrincipal [userInfo=");
|
||||
builder.append(userInfo);
|
||||
builder.append(", onlineTicket=");
|
||||
builder.append(onlineTicket);
|
||||
builder.append(session);
|
||||
builder.append(", grantedAuthority=");
|
||||
builder.append(grantedAuthority);
|
||||
builder.append(", authenticated=");
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ public class AuthJwt implements Serializable {
|
||||
SigninPrincipal principal = ((SigninPrincipal)authentication.getPrincipal());
|
||||
|
||||
this.token = token;
|
||||
this.ticket = principal.getOnlineTicket().getTicketId();
|
||||
this.ticket = principal.getSession().getId();
|
||||
|
||||
this.id = principal.getUserInfo().getId();
|
||||
this.username = principal.getUserInfo().getUsername();
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ public class AuthJwtService {
|
||||
JWTClaimsSet jwtClaims =new JWTClaimsSet.Builder()
|
||||
.issuer(authJwkConfig.getIssuer())
|
||||
.subject(subject)
|
||||
.jwtID(principal.getOnlineTicket().getTicketId())
|
||||
.jwtID(principal.getSession().getId())
|
||||
.issueTime(currentDateTime.toDate())
|
||||
.expirationTime(expirationTime)
|
||||
.claim("locale", userInfo.getLocale())
|
||||
|
||||
+3
-3
@@ -20,8 +20,8 @@ package org.maxkey.authn.provider;
|
||||
import org.maxkey.authn.AbstractAuthenticationProvider;
|
||||
import org.maxkey.authn.LoginCredential;
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.constants.ConstsLoginType;
|
||||
import org.maxkey.entity.Institutions;
|
||||
@@ -57,11 +57,11 @@ public class MfaAuthenticationProvider extends AbstractAuthenticationProvider {
|
||||
public MfaAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
ApplicationConfig applicationConfig,
|
||||
OnlineTicketService onlineTicketServices,
|
||||
SessionService sessionService,
|
||||
AuthJwtService authJwtService) {
|
||||
this.authenticationRealm = authenticationRealm;
|
||||
this.applicationConfig = applicationConfig;
|
||||
this.onlineTicketServices = onlineTicketServices;
|
||||
this.sessionService = sessionService;
|
||||
this.authJwtService = authJwtService;
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -19,8 +19,8 @@ package org.maxkey.authn.provider;
|
||||
|
||||
import org.maxkey.authn.AbstractAuthenticationProvider;
|
||||
import org.maxkey.authn.LoginCredential;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.constants.ConstsLoginType;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
@@ -60,11 +60,11 @@ public class MobileAuthenticationProvider extends AbstractAuthenticationProvider
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
ApplicationConfig applicationConfig,
|
||||
OtpAuthnService otpAuthnService,
|
||||
OnlineTicketService onlineTicketServices) {
|
||||
SessionService sessionService) {
|
||||
this.authenticationRealm = authenticationRealm;
|
||||
this.applicationConfig = applicationConfig;
|
||||
this.otpAuthnService = otpAuthnService;
|
||||
this.onlineTicketServices = onlineTicketServices;
|
||||
this.sessionService = sessionService;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-3
@@ -21,8 +21,8 @@ import java.text.ParseException;
|
||||
import org.maxkey.authn.AbstractAuthenticationProvider;
|
||||
import org.maxkey.authn.LoginCredential;
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.constants.ConstsLoginType;
|
||||
import org.maxkey.entity.Institutions;
|
||||
@@ -57,11 +57,11 @@ public class NormalAuthenticationProvider extends AbstractAuthenticationProvider
|
||||
public NormalAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
ApplicationConfig applicationConfig,
|
||||
OnlineTicketService onlineTicketServices,
|
||||
SessionService sessionService,
|
||||
AuthJwtService authJwtService) {
|
||||
this.authenticationRealm = authenticationRealm;
|
||||
this.applicationConfig = applicationConfig;
|
||||
this.onlineTicketServices = onlineTicketServices;
|
||||
this.sessionService = sessionService;
|
||||
this.authJwtService = authJwtService;
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -19,8 +19,8 @@ package org.maxkey.authn.provider;
|
||||
|
||||
import org.maxkey.authn.AbstractAuthenticationProvider;
|
||||
import org.maxkey.authn.LoginCredential;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.web.WebContext;
|
||||
@@ -49,10 +49,10 @@ public class TrustedAuthenticationProvider extends AbstractAuthenticationProvide
|
||||
public TrustedAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
ApplicationConfig applicationConfig,
|
||||
OnlineTicketService onlineTicketServices) {
|
||||
SessionService sessionService) {
|
||||
this.authenticationRealm = authenticationRealm;
|
||||
this.applicationConfig = applicationConfig;
|
||||
this.onlineTicketServices = onlineTicketServices;
|
||||
this.sessionService = sessionService;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+6
-6
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.authn.online;
|
||||
package org.maxkey.authn.session;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
@@ -32,8 +32,8 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
public class AbstractOnlineTicketService implements OnlineTicketService{
|
||||
private static Logger _logger = LoggerFactory.getLogger(AbstractOnlineTicketService.class);
|
||||
public class AbstractSessionService implements SessionService{
|
||||
private static Logger _logger = LoggerFactory.getLogger(AbstractSessionService.class);
|
||||
|
||||
protected JdbcTemplate jdbcTemplate;
|
||||
|
||||
@@ -93,17 +93,17 @@ public class AbstractOnlineTicketService implements OnlineTicketService{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void store(String ticketId, OnlineTicket ticket) {
|
||||
public void store(String ticketId, Session ticket) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineTicket remove(String ticket) {
|
||||
public Session remove(String ticket) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineTicket get(String ticketId) {
|
||||
public Session get(String ticketId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
+25
-25
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.authn.online;
|
||||
package org.maxkey.authn.session;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalTime;
|
||||
@@ -29,41 +29,41 @@ import com.github.benmanes.caffeine.cache.Cache;
|
||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
|
||||
|
||||
public class InMemoryOnlineTicketService extends AbstractOnlineTicketService{
|
||||
private static final Logger _logger = LoggerFactory.getLogger(InMemoryOnlineTicketService.class);
|
||||
public class InMemorySessionService extends AbstractSessionService{
|
||||
private static final Logger _logger = LoggerFactory.getLogger(InMemorySessionService.class);
|
||||
|
||||
protected static Cache<String, OnlineTicket> onlineTicketStore =
|
||||
protected static Cache<String, Session> sessionStore =
|
||||
Caffeine.newBuilder()
|
||||
.expireAfterWrite(30, TimeUnit.MINUTES)
|
||||
.maximumSize(200000)
|
||||
.build();
|
||||
|
||||
public InMemoryOnlineTicketService(JdbcTemplate jdbcTemplate) {
|
||||
public InMemorySessionService(JdbcTemplate jdbcTemplate) {
|
||||
super();
|
||||
this.jdbcTemplate = jdbcTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void store(String ticketId, OnlineTicket ticket) {
|
||||
onlineTicketStore.put(ticketId, ticket);
|
||||
public void store(String sessionId, Session session) {
|
||||
sessionStore.put(sessionId, session);
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineTicket remove(String ticketId) {
|
||||
OnlineTicket ticket=onlineTicketStore.getIfPresent(ticketId);
|
||||
onlineTicketStore.invalidate(ticketId);
|
||||
return ticket;
|
||||
public Session remove(String sessionId) {
|
||||
Session session = sessionStore.getIfPresent(sessionId);
|
||||
sessionStore.invalidate(sessionId);
|
||||
return session;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineTicket get(String ticketId) {
|
||||
OnlineTicket ticket=onlineTicketStore.getIfPresent(ticketId);
|
||||
return ticket;
|
||||
public Session get(String sessionId) {
|
||||
Session session = sessionStore.getIfPresent(sessionId);
|
||||
return session;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValiditySeconds(int validitySeconds) {
|
||||
onlineTicketStore =
|
||||
sessionStore =
|
||||
Caffeine.newBuilder()
|
||||
.expireAfterWrite(validitySeconds/60, TimeUnit.MINUTES)
|
||||
.maximumSize(200000)
|
||||
@@ -72,24 +72,24 @@ public class InMemoryOnlineTicketService extends AbstractOnlineTicketService{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh(String ticketId,LocalTime refreshTime) {
|
||||
OnlineTicket onlineTicket = get(ticketId);
|
||||
onlineTicket.setTicketTime(refreshTime);
|
||||
store(ticketId , onlineTicket);
|
||||
public void refresh(String sessionId,LocalTime refreshTime) {
|
||||
Session session = get(sessionId);
|
||||
session.setLastAccessTime(refreshTime);
|
||||
store(sessionId , session);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh(String ticketId) {
|
||||
OnlineTicket onlineTicket = get(ticketId);
|
||||
public void refresh(String sessionId) {
|
||||
Session session = get(sessionId);
|
||||
|
||||
LocalTime currentTime = LocalTime.now();
|
||||
Duration duration = Duration.between(currentTime, onlineTicket.getTicketTime());
|
||||
Duration duration = Duration.between(currentTime, session.getLastAccessTime());
|
||||
|
||||
_logger.trace("OnlineTicket duration " + duration.getSeconds());
|
||||
|
||||
if(duration.getSeconds() > OnlineTicket.MAX_EXPIRY_DURATION) {
|
||||
onlineTicket.setTicketTime(currentTime);
|
||||
refresh(ticketId,currentTime);
|
||||
if(duration.getSeconds() > Session.MAX_EXPIRY_DURATION) {
|
||||
session.setLastAccessTime(currentTime);
|
||||
refresh(sessionId,currentTime);
|
||||
}
|
||||
}
|
||||
|
||||
+20
-20
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.authn.online;
|
||||
package org.maxkey.authn.session;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.LocalTime;
|
||||
@@ -27,18 +27,18 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
|
||||
|
||||
public class RedisOnlineTicketService extends AbstractOnlineTicketService {
|
||||
private static final Logger _logger = LoggerFactory.getLogger(RedisOnlineTicketService.class);
|
||||
public class RedisSessionService extends AbstractSessionService {
|
||||
private static final Logger _logger = LoggerFactory.getLogger(RedisSessionService.class);
|
||||
|
||||
protected int serviceTicketValiditySeconds = 60 * 30; //default 30 minutes.
|
||||
|
||||
RedisConnectionFactory connectionFactory;
|
||||
|
||||
public static String PREFIX="REDIS_ONLINE_TICKET_";
|
||||
public static String PREFIX="REDIS_SESSION_";
|
||||
/**
|
||||
* @param connectionFactory
|
||||
*/
|
||||
public RedisOnlineTicketService(
|
||||
public RedisSessionService(
|
||||
RedisConnectionFactory connectionFactory,
|
||||
JdbcTemplate jdbcTemplate) {
|
||||
super();
|
||||
@@ -49,7 +49,7 @@ public class RedisOnlineTicketService extends AbstractOnlineTicketService {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public RedisOnlineTicketService() {
|
||||
public RedisSessionService() {
|
||||
|
||||
}
|
||||
|
||||
@@ -58,27 +58,27 @@ public class RedisOnlineTicketService extends AbstractOnlineTicketService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void store(String ticketId, OnlineTicket ticket) {
|
||||
public void store(String ticketId, Session ticket) {
|
||||
RedisConnection conn=connectionFactory.getConnection();
|
||||
conn.setexObject(PREFIX+ticketId, serviceTicketValiditySeconds, ticket);
|
||||
conn.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineTicket remove(String ticketId) {
|
||||
public Session remove(String ticketId) {
|
||||
RedisConnection conn=connectionFactory.getConnection();
|
||||
OnlineTicket ticket = conn.getObject(PREFIX+ticketId);
|
||||
Session ticket = conn.getObject(PREFIX+ticketId);
|
||||
conn.delete(PREFIX+ticketId);
|
||||
conn.close();
|
||||
return ticket;
|
||||
}
|
||||
|
||||
@Override
|
||||
public OnlineTicket get(String ticketId) {
|
||||
public Session get(String ticketId) {
|
||||
RedisConnection conn=connectionFactory.getConnection();
|
||||
OnlineTicket ticket = conn.getObject(PREFIX+ticketId);
|
||||
Session session = conn.getObject(PREFIX+ticketId);
|
||||
conn.close();
|
||||
return ticket;
|
||||
return session;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -88,23 +88,23 @@ public class RedisOnlineTicketService extends AbstractOnlineTicketService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh(String ticketId,LocalTime refreshTime) {
|
||||
OnlineTicket onlineTicket = get(ticketId);
|
||||
onlineTicket.setTicketTime(refreshTime);
|
||||
store(ticketId , onlineTicket);
|
||||
public void refresh(String sessionId,LocalTime refreshTime) {
|
||||
Session session = get(sessionId);
|
||||
session.setLastAccessTime(refreshTime);
|
||||
store(sessionId , session);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh(String ticketId) {
|
||||
OnlineTicket onlineTicket = get(ticketId);
|
||||
Session session = get(ticketId);
|
||||
|
||||
LocalTime currentTime = LocalTime.now();
|
||||
Duration duration = Duration.between(currentTime, onlineTicket.getTicketTime());
|
||||
Duration duration = Duration.between(currentTime, session.getLastAccessTime());
|
||||
|
||||
_logger.trace("OnlineTicket duration " + duration.getSeconds());
|
||||
|
||||
if(duration.getSeconds() > OnlineTicket.MAX_EXPIRY_DURATION) {
|
||||
onlineTicket.setTicketTime(currentTime);
|
||||
if(duration.getSeconds() > Session.MAX_EXPIRY_DURATION) {
|
||||
session.setLastAccessTime(currentTime);
|
||||
refresh(ticketId,currentTime);
|
||||
}
|
||||
}
|
||||
+52
-34
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.authn.online;
|
||||
package org.maxkey.authn.session;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalTime;
|
||||
@@ -25,61 +25,75 @@ import org.maxkey.entity.apps.Apps;
|
||||
import org.maxkey.web.WebContext;
|
||||
import org.springframework.security.core.Authentication;
|
||||
|
||||
public class OnlineTicket implements Serializable{
|
||||
public class Session implements Serializable{
|
||||
private static final long serialVersionUID = 9008067569150338296L;
|
||||
|
||||
public static final String ONLINE_TICKET_PREFIX = "OT";
|
||||
public static final String SESSION_PREFIX = "OT";
|
||||
|
||||
public static final int MAX_EXPIRY_DURATION = 60 * 10; //default 10 minutes.
|
||||
|
||||
public String ticketId;
|
||||
public String id;
|
||||
|
||||
public LocalTime ticketTime;
|
||||
public LocalTime startTimestamp;
|
||||
|
||||
public LocalTime lastAccessTime;
|
||||
|
||||
public Authentication authentication;
|
||||
|
||||
private HashMap<String , Apps> authorizedApps = new HashMap<String , Apps>();
|
||||
|
||||
public OnlineTicket() {
|
||||
public Session() {
|
||||
super();
|
||||
this.ticketId = WebContext.genId();;
|
||||
this.ticketTime = LocalTime.now();
|
||||
this.id = WebContext.genId();;
|
||||
this.startTimestamp = LocalTime.now();
|
||||
this.lastAccessTime = LocalTime.now();
|
||||
}
|
||||
|
||||
public OnlineTicket(String ticketId) {
|
||||
public Session(String sessionId) {
|
||||
super();
|
||||
this.ticketId = ticketId;
|
||||
this.ticketTime = LocalTime.now();
|
||||
this.id = sessionId;
|
||||
this.startTimestamp = LocalTime.now();
|
||||
this.lastAccessTime = LocalTime.now();
|
||||
}
|
||||
|
||||
public OnlineTicket(String ticketId,Authentication authentication) {
|
||||
public Session(String sessionId,Authentication authentication) {
|
||||
super();
|
||||
this.ticketId = ticketId;
|
||||
this.id = sessionId;
|
||||
this.authentication = authentication;
|
||||
this.ticketTime = LocalTime.now();
|
||||
this.startTimestamp = LocalTime.now();
|
||||
this.lastAccessTime = LocalTime.now();
|
||||
}
|
||||
|
||||
public String getTicketId() {
|
||||
return ticketId;
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getFormattedTicketId() {
|
||||
return ticketId;
|
||||
public String getFormattedId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setTicketId(String ticketId) {
|
||||
this.ticketId = ticketId;
|
||||
public void setId(String ticketId) {
|
||||
this.id = ticketId;
|
||||
}
|
||||
|
||||
public LocalTime getTicketTime() {
|
||||
return ticketTime;
|
||||
}
|
||||
|
||||
public void setTicketTime(LocalTime ticketTime) {
|
||||
this.ticketTime = ticketTime;
|
||||
}
|
||||
public LocalTime getStartTimestamp() {
|
||||
return startTimestamp;
|
||||
}
|
||||
|
||||
public Authentication getAuthentication() {
|
||||
public void setStartTimestamp(LocalTime startTimestamp) {
|
||||
this.startTimestamp = startTimestamp;
|
||||
}
|
||||
|
||||
public LocalTime getLastAccessTime() {
|
||||
return lastAccessTime;
|
||||
}
|
||||
|
||||
public void setLastAccessTime(LocalTime lastAccessTime) {
|
||||
this.lastAccessTime = lastAccessTime;
|
||||
}
|
||||
|
||||
public Authentication getAuthentication() {
|
||||
return authentication;
|
||||
}
|
||||
|
||||
@@ -100,13 +114,17 @@ public class OnlineTicket implements Serializable{
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("OnlineTicket [ticketId=");
|
||||
builder.append(ticketId);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("Session [id=");
|
||||
builder.append(id);
|
||||
builder.append(", startTimestamp=");
|
||||
builder.append(startTimestamp);
|
||||
builder.append(", lastAccessTime=");
|
||||
builder.append(lastAccessTime);
|
||||
builder.append("]");
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
+5
-5
@@ -15,20 +15,20 @@
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.authn.online;
|
||||
package org.maxkey.authn.session;
|
||||
|
||||
import java.time.LocalTime;
|
||||
import java.util.List;
|
||||
|
||||
import org.maxkey.entity.HistoryLogin;
|
||||
|
||||
public interface OnlineTicketService {
|
||||
public interface SessionService {
|
||||
|
||||
public void store(String ticketId, OnlineTicket ticket);
|
||||
public void store(String ticketId, Session ticket);
|
||||
|
||||
public OnlineTicket remove(String ticket);
|
||||
public Session remove(String ticket);
|
||||
|
||||
public OnlineTicket get(String ticketId);
|
||||
public Session get(String ticketId);
|
||||
|
||||
public void refresh(String ticketId ,LocalTime refreshTime);
|
||||
|
||||
+11
-11
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
|
||||
package org.maxkey.authn.online;
|
||||
package org.maxkey.authn.session;
|
||||
|
||||
import org.maxkey.constants.ConstsPersistence;
|
||||
import org.maxkey.persistence.redis.RedisConnectionFactory;
|
||||
@@ -23,26 +23,26 @@ import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
|
||||
public class OnlineTicketServiceFactory {
|
||||
public class SessionServiceFactory {
|
||||
private static final Logger _logger =
|
||||
LoggerFactory.getLogger(OnlineTicketServiceFactory.class);
|
||||
LoggerFactory.getLogger(SessionServiceFactory.class);
|
||||
|
||||
public OnlineTicketService getService(
|
||||
public SessionService getService(
|
||||
int persistence,
|
||||
JdbcTemplate jdbcTemplate,
|
||||
RedisConnectionFactory redisConnFactory){
|
||||
|
||||
OnlineTicketService onlineTicketServices = null;
|
||||
SessionService sessionService = null;
|
||||
if (persistence == ConstsPersistence.INMEMORY) {
|
||||
onlineTicketServices = new InMemoryOnlineTicketService(jdbcTemplate);
|
||||
_logger.debug("InMemoryOnlineTicketServices");
|
||||
sessionService = new InMemorySessionService(jdbcTemplate);
|
||||
_logger.debug("InMemorySessionService");
|
||||
} else if (persistence == ConstsPersistence.JDBC) {
|
||||
_logger.debug("OnlineTicketServices not support ");
|
||||
_logger.debug("JdbcSessionService not support ");
|
||||
} else if (persistence == ConstsPersistence.REDIS) {
|
||||
onlineTicketServices = new RedisOnlineTicketService(redisConnFactory,jdbcTemplate);
|
||||
_logger.debug("RedisOnlineTicketServices");
|
||||
sessionService = new RedisSessionService(redisConnFactory,jdbcTemplate);
|
||||
_logger.debug("RedisSessionService");
|
||||
}
|
||||
|
||||
return onlineTicketServices;
|
||||
return sessionService;
|
||||
}
|
||||
}
|
||||
+8
-8
@@ -24,8 +24,8 @@ import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.maxkey.authn.SigninPrincipal;
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.online.OnlineTicket;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.session.Session;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.entity.UserInfo;
|
||||
import org.maxkey.util.AuthorizationHeaderUtils;
|
||||
import org.maxkey.web.WebConstants;
|
||||
@@ -42,13 +42,13 @@ public class AuthorizationUtils {
|
||||
public static void authenticateWithCookie(
|
||||
HttpServletRequest request,
|
||||
AuthJwtService authJwtService,
|
||||
OnlineTicketService onlineTicketService
|
||||
SessionService sessionService
|
||||
) throws ParseException{
|
||||
if(getAuthentication() == null) {
|
||||
Cookie authCookie = WebContext.getCookie(request, Authorization_Cookie);
|
||||
if(authCookie != null ) {
|
||||
String authorization = authCookie.getValue();
|
||||
doJwtAuthenticate(authorization,authJwtService,onlineTicketService);
|
||||
doJwtAuthenticate(authorization,authJwtService,sessionService);
|
||||
_logger.debug("congress automatic authenticated .");
|
||||
}
|
||||
}
|
||||
@@ -57,12 +57,12 @@ public class AuthorizationUtils {
|
||||
public static void authenticate(
|
||||
HttpServletRequest request,
|
||||
AuthJwtService authJwtService,
|
||||
OnlineTicketService onlineTicketService
|
||||
SessionService sessionService
|
||||
) throws ParseException{
|
||||
if(getAuthentication() == null) {
|
||||
String authorization = AuthorizationHeaderUtils.resolveBearer(request);
|
||||
if(authorization != null ) {
|
||||
doJwtAuthenticate(authorization,authJwtService,onlineTicketService);
|
||||
doJwtAuthenticate(authorization,authJwtService,sessionService);
|
||||
_logger.debug("Authorization automatic authenticated .");
|
||||
}
|
||||
}
|
||||
@@ -71,10 +71,10 @@ public class AuthorizationUtils {
|
||||
public static void doJwtAuthenticate(
|
||||
String authorization,
|
||||
AuthJwtService authJwtService,
|
||||
OnlineTicketService onlineTicketService) throws ParseException {
|
||||
SessionService sessionService) throws ParseException {
|
||||
if(authJwtService.validateJwtToken(authorization)) {
|
||||
String ticket = authJwtService.resolveJWTID(authorization);
|
||||
OnlineTicket onlineTicket = onlineTicketService.get(ticket);
|
||||
Session onlineTicket = sessionService.get(ticket);
|
||||
if(onlineTicket != null) {
|
||||
setAuthentication(onlineTicket.getAuthentication());
|
||||
}
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@ public class SessionListenerAdapter implements HttpSessionListener {
|
||||
session.getId(),
|
||||
principal.getUserInfo().getId(),
|
||||
principal.getUserInfo().getUsername(),
|
||||
principal.getOnlineTicket().getTicketId());
|
||||
principal.getSession().getId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-3
@@ -23,7 +23,7 @@ import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.maxkey.authn.SigninPrincipal;
|
||||
import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.authn.web.AuthorizationUtils;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.slf4j.Logger;
|
||||
@@ -44,7 +44,7 @@ public class PermissionInterceptor implements AsyncHandlerInterceptor {
|
||||
ApplicationConfig applicationConfig;
|
||||
|
||||
@Autowired
|
||||
OnlineTicketService onlineTicketService;
|
||||
SessionService sessionService;
|
||||
|
||||
@Autowired
|
||||
AuthJwtService authJwtService ;
|
||||
@@ -59,7 +59,7 @@ public class PermissionInterceptor implements AsyncHandlerInterceptor {
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
|
||||
_logger.trace("Permission Interceptor .");
|
||||
AuthorizationUtils.authenticate(request, authJwtService, onlineTicketService);
|
||||
AuthorizationUtils.authenticate(request, authJwtService, sessionService);
|
||||
SigninPrincipal principal = AuthorizationUtils.getPrincipal();
|
||||
//判断用户是否登录,判断用户是否登录用户
|
||||
if(principal == null){
|
||||
|
||||
+14
-14
@@ -23,13 +23,13 @@ import org.maxkey.authn.jwt.AuthJwtService;
|
||||
import org.maxkey.authn.jwt.CongressService;
|
||||
import org.maxkey.authn.jwt.InMemoryCongressService;
|
||||
import org.maxkey.authn.jwt.RedisCongressService;
|
||||
import org.maxkey.authn.online.OnlineTicketService;
|
||||
import org.maxkey.authn.online.OnlineTicketServiceFactory;
|
||||
import org.maxkey.authn.provider.AuthenticationProviderFactory;
|
||||
import org.maxkey.authn.provider.MobileAuthenticationProvider;
|
||||
import org.maxkey.authn.provider.NormalAuthenticationProvider;
|
||||
import org.maxkey.authn.provider.TrustedAuthenticationProvider;
|
||||
import org.maxkey.authn.realm.AbstractAuthenticationRealm;
|
||||
import org.maxkey.authn.session.SessionService;
|
||||
import org.maxkey.authn.session.SessionServiceFactory;
|
||||
import org.maxkey.authn.web.SessionListenerAdapter;
|
||||
import org.maxkey.configuration.ApplicationConfig;
|
||||
import org.maxkey.configuration.AuthJwkConfig;
|
||||
@@ -86,14 +86,14 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
public AbstractAuthenticationProvider normalAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
ApplicationConfig applicationConfig,
|
||||
OnlineTicketService onlineTicketServices,
|
||||
SessionService sessionService,
|
||||
AuthJwtService authJwtService
|
||||
) {
|
||||
_logger.debug("init authentication Provider .");
|
||||
return new NormalAuthenticationProvider(
|
||||
authenticationRealm,
|
||||
applicationConfig,
|
||||
onlineTicketServices,
|
||||
sessionService,
|
||||
authJwtService
|
||||
);
|
||||
}
|
||||
@@ -103,14 +103,14 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
ApplicationConfig applicationConfig,
|
||||
OtpAuthnService otpAuthnService,
|
||||
OnlineTicketService onlineTicketServices
|
||||
SessionService sessionService
|
||||
) {
|
||||
_logger.debug("init Mobile authentication Provider .");
|
||||
return new MobileAuthenticationProvider(
|
||||
authenticationRealm,
|
||||
applicationConfig,
|
||||
otpAuthnService,
|
||||
onlineTicketServices
|
||||
sessionService
|
||||
);
|
||||
}
|
||||
|
||||
@@ -118,13 +118,13 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
public AbstractAuthenticationProvider trustedAuthenticationProvider(
|
||||
AbstractAuthenticationRealm authenticationRealm,
|
||||
ApplicationConfig applicationConfig,
|
||||
OnlineTicketService onlineTicketServices
|
||||
SessionService sessionService
|
||||
) {
|
||||
_logger.debug("init Mobile authentication Provider .");
|
||||
return new TrustedAuthenticationProvider(
|
||||
authenticationRealm,
|
||||
applicationConfig,
|
||||
onlineTicketServices
|
||||
sessionService
|
||||
);
|
||||
}
|
||||
|
||||
@@ -181,18 +181,18 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
|
||||
}
|
||||
|
||||
|
||||
@Bean(name = "onlineTicketService")
|
||||
public OnlineTicketService onlineTicketService(
|
||||
@Bean(name = "sessionService")
|
||||
public SessionService sessionService(
|
||||
@Value("${maxkey.server.persistence}") int persistence,
|
||||
JdbcTemplate jdbcTemplate,
|
||||
RedisConnectionFactory redisConnFactory,
|
||||
@Value("${server.servlet.session.timeout:1800}") int timeout
|
||||
) {
|
||||
OnlineTicketService onlineTicketService =
|
||||
new OnlineTicketServiceFactory().getService(persistence, jdbcTemplate, redisConnFactory);
|
||||
onlineTicketService.setValiditySeconds(timeout);
|
||||
SessionService sessionService =
|
||||
new SessionServiceFactory().getService(persistence, jdbcTemplate, redisConnFactory);
|
||||
sessionService.setValiditySeconds(timeout);
|
||||
_logger.trace("onlineTicket timeout " + timeout);
|
||||
return onlineTicketService;
|
||||
return sessionService;
|
||||
}
|
||||
|
||||
@Bean(name = "sessionListenerAdapter")
|
||||
|
||||
Reference in New Issue
Block a user