整合LoginHistoryRepository 到 HistoryLoginService

This commit is contained in:
shimingxy 2024-12-17 09:48:54 +08:00
parent 9e20e02ead
commit f19e92e2dc
12 changed files with 61 additions and 174 deletions

View File

@ -28,9 +28,9 @@ import org.dromara.maxkey.entity.idm.Groups;
import org.dromara.maxkey.entity.idm.UserInfo;
import org.dromara.maxkey.ip2location.IpLocationParser;
import org.dromara.maxkey.ip2location.Region;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.persistence.service.UserInfoService;
import org.dromara.maxkey.web.WebConstants;
import org.dromara.maxkey.web.WebContext;
@ -54,7 +54,7 @@ public abstract class AbstractAuthenticationRealm {
protected LoginRepository loginRepository;
protected LoginHistoryRepository loginHistoryRepository;
protected HistoryLoginService historyLoginService;
protected UserInfoService userInfoService;
@ -158,7 +158,7 @@ public abstract class AbstractAuthenticationRealm {
historyLogin.setCity(ipRegion.getCity());
historyLogin.setLocation(ipRegion.getAddr());
}
loginHistoryRepository.login(historyLogin);
historyLoginService.login(historyLogin);
loginRepository.updateLastLogin(userInfo);

View File

@ -26,9 +26,9 @@ import org.dromara.maxkey.entity.ChangePassword;
import org.dromara.maxkey.entity.cnf.CnfPasswordPolicy;
import org.dromara.maxkey.entity.idm.UserInfo;
import org.dromara.maxkey.ip2location.IpLocationParser;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.persistence.service.UserInfoService;
import org.dromara.maxkey.web.WebConstants;
import org.dromara.maxkey.web.WebContext;
@ -60,7 +60,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
PasswordEncoder passwordEncoder,
PasswordPolicyValidator passwordPolicyValidator,
LoginRepository loginRepository,
LoginHistoryRepository loginHistoryRepository,
HistoryLoginService historyLoginService,
UserInfoService userInfoService,
IpLocationParser ipLocationParser,
JdbcTemplate jdbcTemplate) {
@ -68,7 +68,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
this.passwordEncoder =passwordEncoder;
this.passwordPolicyValidator=passwordPolicyValidator;
this.loginRepository = loginRepository;
this.loginHistoryRepository = loginHistoryRepository;
this.historyLoginService = historyLoginService;
this.userInfoService = userInfoService;
this.ipLocationParser = ipLocationParser;
this.jdbcTemplate = jdbcTemplate;
@ -78,7 +78,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
PasswordEncoder passwordEncoder,
PasswordPolicyValidator passwordPolicyValidator,
LoginRepository loginRepository,
LoginHistoryRepository loginHistoryRepository,
HistoryLoginService historyLoginService,
UserInfoService userInfoService,
IpLocationParser ipLocationParser,
JdbcTemplate jdbcTemplate,
@ -86,7 +86,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
this.passwordEncoder = passwordEncoder;
this.passwordPolicyValidator = passwordPolicyValidator;
this.loginRepository = loginRepository;
this.loginHistoryRepository = loginHistoryRepository;
this.historyLoginService = historyLoginService;
this.userInfoService = userInfoService;
this.ipLocationParser = ipLocationParser;
this.jdbcTemplate = jdbcTemplate;

View File

@ -25,7 +25,6 @@ import org.dromara.maxkey.authn.realm.AbstractAuthenticationRealm;
import org.dromara.maxkey.authn.session.SessionManager;
import org.dromara.maxkey.configuration.ApplicationConfig;
import org.dromara.maxkey.password.sms.SmsOtpAuthnService;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.slf4j.Logger;
@ -109,9 +108,4 @@ public class AuthnProviderAutoConfiguration {
return new LoginRepository(jdbcTemplate);
}
@Bean
LoginHistoryRepository loginHistoryRepository(JdbcTemplate jdbcTemplate) {
return new LoginHistoryRepository(jdbcTemplate);
}
}

View File

@ -28,9 +28,9 @@ import org.dromara.maxkey.entity.idm.Groups;
import org.dromara.maxkey.entity.idm.UserInfo;
import org.dromara.maxkey.ip2location.IpLocationParser;
import org.dromara.maxkey.ip2location.Region;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.persistence.service.UserInfoService;
import org.dromara.maxkey.web.WebConstants;
import org.dromara.maxkey.web.WebContext;
@ -54,7 +54,7 @@ public abstract class AbstractAuthenticationRealm {
protected LoginRepository loginRepository;
protected LoginHistoryRepository loginHistoryRepository;
protected HistoryLoginService historyLoginService;
protected UserInfoService userInfoService;
@ -158,7 +158,7 @@ public abstract class AbstractAuthenticationRealm {
historyLogin.setCity(ipRegion.getCity());
historyLogin.setLocation(ipRegion.getAddr());
}
loginHistoryRepository.login(historyLogin);
historyLoginService.login(historyLogin);
loginRepository.updateLastLogin(userInfo);

View File

@ -26,9 +26,9 @@ import org.dromara.maxkey.entity.ChangePassword;
import org.dromara.maxkey.entity.cnf.CnfPasswordPolicy;
import org.dromara.maxkey.entity.idm.UserInfo;
import org.dromara.maxkey.ip2location.IpLocationParser;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.persistence.service.UserInfoService;
import org.dromara.maxkey.web.WebConstants;
import org.dromara.maxkey.web.WebContext;
@ -60,7 +60,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
PasswordEncoder passwordEncoder,
PasswordPolicyValidator passwordPolicyValidator,
LoginRepository loginRepository,
LoginHistoryRepository loginHistoryRepository,
HistoryLoginService historyLoginService,
UserInfoService userInfoService,
IpLocationParser ipLocationParser,
JdbcTemplate jdbcTemplate) {
@ -68,7 +68,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
this.passwordEncoder =passwordEncoder;
this.passwordPolicyValidator=passwordPolicyValidator;
this.loginRepository = loginRepository;
this.loginHistoryRepository = loginHistoryRepository;
this.historyLoginService = historyLoginService;
this.userInfoService = userInfoService;
this.ipLocationParser = ipLocationParser;
this.jdbcTemplate = jdbcTemplate;
@ -78,7 +78,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
PasswordEncoder passwordEncoder,
PasswordPolicyValidator passwordPolicyValidator,
LoginRepository loginRepository,
LoginHistoryRepository loginHistoryRepository,
HistoryLoginService historyLoginService,
UserInfoService userInfoService,
IpLocationParser ipLocationParser,
JdbcTemplate jdbcTemplate,
@ -86,7 +86,7 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
this.passwordEncoder = passwordEncoder;
this.passwordPolicyValidator = passwordPolicyValidator;
this.loginRepository = loginRepository;
this.loginHistoryRepository = loginHistoryRepository;
this.historyLoginService = historyLoginService;
this.userInfoService = userInfoService;
this.ipLocationParser = ipLocationParser;
this.jdbcTemplate = jdbcTemplate;

View File

@ -27,7 +27,6 @@ import org.dromara.maxkey.authn.support.rememberme.AbstractRemeberMeManager;
import org.dromara.maxkey.authn.support.rememberme.JdbcRemeberMeManager;
import org.dromara.maxkey.configuration.ApplicationConfig;
import org.dromara.maxkey.password.sms.SmsOtpAuthnService;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.slf4j.Logger;
@ -143,11 +142,6 @@ public class AuthnProviderAutoConfiguration {
return new LoginRepository(jdbcTemplate);
}
@Bean
LoginHistoryRepository loginHistoryRepository(JdbcTemplate jdbcTemplate) {
return new LoginHistoryRepository(jdbcTemplate);
}
/**
* remeberMeService .
* @return

View File

@ -1,136 +0,0 @@
/*
* Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dromara.maxkey.persistence.repository;
import java.sql.Types;
import org.apache.commons.lang3.StringUtils;
import org.dromara.maxkey.entity.history.HistoryLogin;
import org.dromara.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
public class LoginHistoryRepository {
private static Logger logger = LoggerFactory.getLogger(LoginHistoryRepository.class);
private static final String HISTORY_LOGIN_INSERT_STATEMENT = """
insert into mxk_history_login
( id ,
sessionid ,
category ,
userid ,
username ,
displayname ,
logintype ,
message ,
code ,
provider ,
sourceip ,
country ,
province ,
city ,
location ,
browser ,
platform ,
application ,
sessionstatus ,
instid)
values( ? , ? , ? , ? , ? , ? , ? , ?, ? , ? , ? , ?, ?, ? , ? , ?, ? , ? , ? , ?)
""";
protected JdbcTemplate jdbcTemplate;
public LoginHistoryRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void login(HistoryLogin historyLogin) {
historyLogin.setId(WebContext.genId());
if(StringUtils.isBlank(historyLogin.getInstId())) {
historyLogin.setInstId("1");
}
//Thread insert
new Thread(new HistoryLoginRunnable(jdbcTemplate,historyLogin)).start();
}
public class HistoryLoginRunnable implements Runnable{
JdbcTemplate jdbcTemplate;
HistoryLogin historyLogin;
public HistoryLoginRunnable(JdbcTemplate jdbcTemplate, HistoryLogin historyLogin) {
super();
this.jdbcTemplate = jdbcTemplate;
this.historyLogin = historyLogin;
}
@Override
public void run() {
logger.debug("History Login {}" , historyLogin);
jdbcTemplate.update(HISTORY_LOGIN_INSERT_STATEMENT,
new Object[] {
historyLogin.getId(),
historyLogin.getSessionId(),
historyLogin.getCategory(),
historyLogin.getUserId(),
historyLogin.getUsername(),
historyLogin.getDisplayName(),
historyLogin.getLoginType(),
historyLogin.getMessage(),
historyLogin.getCode(),
historyLogin.getProvider(),
historyLogin.getSourceIp(),
historyLogin.getCountry(),
historyLogin.getProvince(),
historyLogin.getCity(),
historyLogin.getLocation(),
historyLogin.getBrowser(),
historyLogin.getPlatform(),
"Browser",
historyLogin.getSessionStatus(),
historyLogin.getInstId()
},
new int[] {
Types.VARCHAR,
Types.VARCHAR,
Types.INTEGER,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.VARCHAR,
Types.INTEGER,
Types.VARCHAR
});
}
}
}

View File

@ -24,4 +24,6 @@ import org.dromara.mybatis.jpa.entity.JpaPageResults;
public interface HistoryLoginService extends IJpaService<HistoryLogin>{
public JpaPageResults<HistoryLogin> queryOnlineSession(HistoryLogin historyLogin);
public void login(HistoryLogin historyLogin);
}

View File

@ -17,17 +17,50 @@
package org.dromara.maxkey.persistence.service.impl;
import org.apache.commons.lang3.StringUtils;
import org.dromara.maxkey.entity.history.HistoryLogin;
import org.dromara.maxkey.persistence.mapper.HistoryLoginMapper;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.web.WebContext;
import org.dromara.mybatis.jpa.entity.JpaPageResults;
import org.dromara.mybatis.jpa.service.impl.JpaServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
@Repository
public class HistoryLoginServiceImpl extends JpaServiceImpl<HistoryLoginMapper,HistoryLogin> implements HistoryLoginService{
private static Logger logger = LoggerFactory.getLogger(HistoryLoginServiceImpl.class);
public JpaPageResults<HistoryLogin> queryOnlineSession(HistoryLogin historyLogin) {
return this.fetchPageResults("queryOnlineSession",historyLogin);
}
public void login(HistoryLogin historyLogin) {
historyLogin.setId(WebContext.genId());
if(StringUtils.isBlank(historyLogin.getInstId())) {
historyLogin.setInstId("1");
}
//Thread insert
new Thread(new HistoryLoginRunnable(this,historyLogin)).start();
}
public class HistoryLoginRunnable implements Runnable{
HistoryLoginService historyLoginService;
HistoryLogin historyLogin;
public HistoryLoginRunnable(HistoryLoginService historyLoginService, HistoryLogin historyLogin) {
super();
this.historyLoginService = historyLoginService;
this.historyLogin = historyLogin;
}
@Override
public void run() {
logger.debug("History Login {}" , historyLogin);
this.historyLoginService.insert(historyLogin);
}
}
}

View File

@ -42,10 +42,10 @@ import org.dromara.maxkey.password.onetimepwd.impl.MailOtpAuthn;
import org.dromara.maxkey.password.onetimepwd.impl.TimeBasedOtpAuthn;
import org.dromara.maxkey.password.onetimepwd.token.RedisOtpTokenStore;
import org.dromara.maxkey.persistence.redis.RedisConnectionFactory;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.dromara.maxkey.persistence.service.CnfLdapContextService;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.persistence.service.UserInfoService;
import org.dromara.maxkey.schedule.ScheduleAdapterBuilder;
import org.quartz.Scheduler;
@ -90,7 +90,7 @@ public class MaxKeyConfig {
@Qualifier("passwordEncoder") PasswordEncoder passwordEncoder,
PasswordPolicyValidator passwordPolicyValidator,
LoginRepository loginService,
LoginHistoryRepository loginHistoryService,
HistoryLoginService historyLoginService,
UserInfoService userInfoService,
IpLocationParser ipLocationParser,
JdbcTemplate jdbcTemplate,
@ -101,7 +101,7 @@ public class MaxKeyConfig {
passwordEncoder,
passwordPolicyValidator,
loginService,
loginHistoryService,
historyLoginService,
userInfoService,
ipLocationParser,
jdbcTemplate,

View File

@ -21,9 +21,9 @@ import org.dromara.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm;
import org.dromara.maxkey.ip2location.IpLocationParser;
import org.dromara.maxkey.password.onetimepwd.AbstractOtpAuthn;
import org.dromara.maxkey.password.onetimepwd.impl.TimeBasedOtpAuthn;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.persistence.service.UserInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -44,7 +44,7 @@ public class MaxKeyMgtConfig {
PasswordEncoder passwordEncoder,
PasswordPolicyValidator passwordPolicyValidator,
LoginRepository loginRepository,
LoginHistoryRepository loginHistoryRepository,
HistoryLoginService historyLoginService,
UserInfoService userInfoService,
IpLocationParser ipLocationParser,
JdbcTemplate jdbcTemplate) {
@ -53,7 +53,7 @@ public class MaxKeyMgtConfig {
passwordEncoder,
passwordPolicyValidator,
loginRepository,
loginHistoryRepository,
historyLoginService,
userInfoService,
ipLocationParser,
jdbcTemplate);

View File

@ -21,9 +21,9 @@ import org.dromara.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm;
import org.dromara.maxkey.ip2location.IpLocationParser;
import org.dromara.maxkey.password.onetimepwd.AbstractOtpAuthn;
import org.dromara.maxkey.password.onetimepwd.impl.TimeBasedOtpAuthn;
import org.dromara.maxkey.persistence.repository.LoginHistoryRepository;
import org.dromara.maxkey.persistence.repository.LoginRepository;
import org.dromara.maxkey.persistence.repository.PasswordPolicyValidator;
import org.dromara.maxkey.persistence.service.HistoryLoginService;
import org.dromara.maxkey.persistence.service.UserInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -44,7 +44,7 @@ public class MaxKeyOpenApiConfig{
PasswordEncoder passwordEncoder,
PasswordPolicyValidator passwordPolicyValidator,
LoginRepository loginRepository,
LoginHistoryRepository loginHistoryRepository,
HistoryLoginService historyLoginService,
UserInfoService userInfoService,
IpLocationParser ipLocationParser,
JdbcTemplate jdbcTemplate) {
@ -53,7 +53,7 @@ public class MaxKeyOpenApiConfig{
passwordEncoder,
passwordPolicyValidator,
loginRepository,
loginHistoryRepository,
historyLoginService,
userInfoService,
ipLocationParser,
jdbcTemplate);