v2.9.0 & SessionListenerAdapter

v2.9.0 & SessionListenerAdapter
This commit is contained in:
MaxKey
2021-08-18 16:33:46 +08:00
parent dd2ff29278
commit eda9eeb6e8
10 changed files with 153 additions and 12 deletions

View File

@@ -143,8 +143,6 @@ public abstract class AbstractAuthenticationProvider {
WebContext.setAttribute(attributeName, sessionAttributeMap.get(attributeName));
}
WebContext.setAttribute(
WebConstants.CURRENT_USER_SESSION_ID, WebContext.getSession().getId());
_logger.debug("Login Success Session {}.", WebContext.getSession().getId());
}

View File

@@ -135,10 +135,12 @@ public class RealmAuthenticationProvider extends AbstractAuthenticationProvider
authenticationRealm.passwordMatches(loadeduserInfo, loginCredential.getPassword());
authenticationRealm.getPasswordPolicyValidator().passwordPolicyValid(loadeduserInfo);
Authentication authentication = setOnline(loginCredential,loadeduserInfo);
authenticationRealm.insertLoginHistory(loadeduserInfo, loginCredential.getAuthType(), "", "", "SUCCESS");
return setOnline(loginCredential,loadeduserInfo);
return authentication;
}else {
String message = WebContext.getI18nValue("login.error.username");
_logger.debug("login user " + loginCredential.getUsername() + " not in this System ." + message);
@@ -166,9 +168,11 @@ public class RealmAuthenticationProvider extends AbstractAuthenticationProvider
LoginCredential loginCredential = new LoginCredential();
loginCredential.setUsername(loadeduserInfo.getUsername());
Authentication authentication = setOnline(loginCredential,loadeduserInfo);
authenticationRealm.insertLoginHistory(loadeduserInfo, type, provider, code, message);
return setOnline(loginCredential,loadeduserInfo);
return authentication;
}else {
String i18nMessage = WebContext.getI18nValue("login.error.username");
_logger.debug("login user " + username + " not in this System ." + i18nMessage);
@@ -178,7 +182,7 @@ public class RealmAuthenticationProvider extends AbstractAuthenticationProvider
public UsernamePasswordAuthenticationToken setOnline(LoginCredential credential,UserInfo userInfo) {
//Online Tickit Id
String onlineTickitId = WebConstants.ONLINE_TICKET_PREFIX + "-" + java.util.UUID.randomUUID().toString().toLowerCase();
String onlineTickitId = WebConstants.ONLINE_TICKET_PREFIX + "-" +WebContext.genId();
_logger.debug("set online Tickit Cookie " + onlineTickitId + " on domain "+ this.applicationConfig.getBaseDomainName());
OnlineTicket onlineTicket = new OnlineTicket(onlineTickitId);

View File

@@ -21,6 +21,9 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.maxkey.authn.SigninPrincipal;
import org.maxkey.authn.online.OnlineTicket;
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
import org.maxkey.entity.Groups;
import org.maxkey.entity.UserInfo;
@@ -34,6 +37,7 @@ import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;
/**
@@ -134,7 +138,18 @@ public abstract class AbstractAuthenticationRealm {
*/
public boolean insertLoginHistory(UserInfo userInfo, String type, String provider, String code, String message) {
String sessionId = WebContext.genId();
OnlineTicket onlineTicket = null ;
Authentication authentication = WebContext.getAuthentication();
if(authentication.getPrincipal() instanceof SigninPrincipal) {
SigninPrincipal signinPrincipal = (SigninPrincipal)authentication.getPrincipal();
onlineTicket = signinPrincipal.getOnlineTicket();
sessionId = onlineTicket.getTicketId().substring(3);
}
WebContext.setAttribute(WebConstants.CURRENT_USER_SESSION_ID, sessionId);
_logger.debug("user session id is {} , online ticket {} ",sessionId,(onlineTicket == null ? "" : onlineTicket.getTicketId()));
userInfo.setLastLoginTime(DateUtils.formatDateTime(new Date()));
userInfo.setLastLoginIp(WebContext.getRequestIpAddress());
String platform = "";
@@ -202,6 +217,8 @@ public abstract class AbstractAuthenticationRealm {
_logger.debug("Session " + WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID) + ", user "
+ userInfo.getUsername() + " Logout, datetime " + userInfo.getLastLogoffTime() + " .");
//remove login user session id
WebContext.removeAttribute(WebConstants.CURRENT_USER_SESSION_ID);
}
return true;

View File

@@ -163,8 +163,14 @@ public class AuthenticationAutoConfiguration implements InitializingBean {
public OnlineTicketServices onlineTicketServices(
@Value("${maxkey.server.persistence}") int persistence,
JdbcTemplate jdbcTemplate,
RedisConnectionFactory redisConnFactory) {
return new OnlineTicketServicesFactory().getService(persistence, jdbcTemplate, redisConnFactory);
RedisConnectionFactory redisConnFactory,
@Value("${server.servlet.session.timeout:1800}") int timeout
) {
OnlineTicketServices onlineTicketServices =
new OnlineTicketServicesFactory().getService(persistence, jdbcTemplate, redisConnFactory);
onlineTicketServices.setValiditySeconds(timeout);
_logger.trace("onlineTicket timeout " + timeout);
return onlineTicketServices;
}
@Override