From 1f2b304968501d563d10440ef24ff77c6a2e10c9 Mon Sep 17 00:00:00 2001 From: wynne1005 Date: Mon, 18 Jan 2021 18:13:25 +0800 Subject: [PATCH 1/7] =?UTF-8?q?E9=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=951?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/base/ISystemLoginService.java | 51 ++++--- .../iservice/base/ISystemLoginStrategyService.java | 21 +++ .../apiservice/auth/ShiroAuthConfiguration.java | 6 +- .../apiservice/auth/realm/DefaultModularRealm.java | 32 ++-- .../auth/realm/strategy/E9AuthRealm.java | 44 ++++++ .../controller/base/WhiteController.java | 162 ++++++++++----------- .../serviceimpl/base/SystemLoginService.java | 109 ++++++++------ .../base/login/strategy/DefaultLoginStrategy.java | 87 +++++++++++ .../base/login/strategy/E9LoginStrategy.java | 104 +++++++++++++ 9 files changed, 459 insertions(+), 157 deletions(-) create mode 100644 modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/E9AuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java index 7aa900e..9fe6508 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java @@ -1,11 +1,14 @@ package cn.estsh.i3plus.core.api.iservice.base; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import io.swagger.annotations.ApiOperation; +import javax.servlet.http.HttpServletRequest; + /** * @Description : 用户登陆方法,平台统一登陆 * @Reference : @@ -17,54 +20,68 @@ public interface ISystemLoginService { /** * 普通用户登录 - * @param loginName 账号 - * @param loginPwd 密码 - * @param languageCode 登录语言 + * + * @param loginName 账号 + * @param loginPwd 密码 + * @param languageCode 登录语言 * @return 用户会话 */ - @ApiOperation(value = "用户登录",notes = "普通用户登录") + @ApiOperation(value = "用户登录", notes = "普通用户登录") SessionUser queryUserLogin(String loginName, String loginPwd, String languageCode); /** * 管理员登录 - * @param loginName 账号 - * @param loginPwd 密码 - * @param languageCode 登录语言 + * + * @param loginName 账号 + * @param loginPwd 密码 + * @param languageCode 登录语言 * @return 用户会话 */ - @ApiOperation(value = "用户登录",notes = "管理用户登录") + @ApiOperation(value = "用户登录", notes = "管理用户登录") SessionUser queryAdminLogin(String loginName, String loginPwd, String languageCode); /** * 用户信息分装 + * * @param authenticationToken - * @return 用户会话 + * @return 用户会话 */ - @ApiOperation(value = "封装用户",notes = "封装普通用户信息") + @ApiOperation(value = "封装用户", notes = "封装普通用户信息") SessionUser queryCheckUserLogin(UserToken authenticationToken); /** * 管理员登录 - * @param authenticationToken 登录信息 + * + * @param authenticationToken 登录信息 * @return 用户会话 */ - @ApiOperation(value = "封装用户",notes = "封装管理员信息") + @ApiOperation(value = "封装用户", notes = "封装管理员信息") SessionUser queryCheckAdminLogin(AdminToken authenticationToken); /** - * 超级管理员登录 - * @param authenticationToken 登录信息 + * 超级管理员登录 + * + * @param authenticationToken 登录信息 * @return 用户会话 */ - @ApiOperation(value = "封装用户",notes = "封装超级管理员信息") + @ApiOperation(value = "封装用户", notes = "封装超级管理员信息") SessionUser queryCheckSaAdminLogin(SaAdminToken authenticationToken); /** * 记录登录错误 + * * @param loginName 账号 * @param sessionId Session ID * @return 用户会话 */ - @ApiOperation(value = "登录密码错误",notes = "登录密码错误记录错误次数功能") - Integer doLoginPasswordError(String loginName,String sessionId); + @ApiOperation(value = "登录密码错误", notes = "登录密码错误记录错误次数功能") + Integer doLoginPasswordError(String loginName, String sessionId); + + /** + * 获取登录的平台 + * + * @param request http请求 + * @return 平台枚举 + */ + CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(HttpServletRequest request); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java new file mode 100644 index 0000000..ae44d9b --- /dev/null +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java @@ -0,0 +1,21 @@ +package cn.estsh.i3plus.core.api.iservice.base; + +import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; +import cn.estsh.impp.framework.boot.util.ResultBean; + +import javax.servlet.http.HttpServletRequest; +import java.util.function.BiFunction; + +/** + * @author Wynne.Lu + * @date 2021/1/18 上午10:50 + * @desc + */ +public interface ISystemLoginStrategyService { + /** + * @param request + * @param loginModel + * @return + */ + BiFunction login(); +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java index c1fe314..1c759b4 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java @@ -12,10 +12,10 @@ import cn.estsh.impp.framework.boot.auth.filter.UserFilter; import cn.estsh.impp.framework.boot.configuration.RedisConfig; import org.apache.shiro.authc.pam.ModularRealmAuthenticator; import org.apache.shiro.cache.CacheManager; +import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.realm.Realm; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; -import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,7 +85,7 @@ public class ShiroAuthConfiguration { public Map supportRealmMap(){ //支持的授权规则 - Map realms = new HashMap(); + Map realms = new HashMap(8); realms.put(CommonEnumUtil.USER_TYPE.USER.getCode(),userAuthRealm()); realms.put(CommonEnumUtil.USER_TYPE.ADMIN.getCode(),adminAuthRealm()); realms.put(CommonEnumUtil.USER_TYPE.SA.getCode(),saAuthRealm()); @@ -115,7 +115,7 @@ public class ShiroAuthConfiguration { ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean(); factoryBean.setSecurityManager(securityManager); - Map filterMap = new HashMap(); + Map filterMap = new HashMap(8); filterMap.put("user_filter", new UserFilter()); filterMap.put("admin_filter", new AdminFilter()); filterMap.put("saadmin_filter", new SaAdminFilter()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java index 1daaac7..6290fbd 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.core.apiservice.auth.realm; -import cn.estsh.i3plus.core.apiservice.controller.DemoAuthController; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; @@ -47,18 +48,23 @@ public class DefaultModularRealm extends ModularRealmAuthenticator { @Override protected AuthenticationInfo doAuthenticate(AuthenticationToken token) throws AuthenticationException { Realm realm; - if (token instanceof SaAdminToken) { - //超级管理员 - realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.SA.getCode()); - } else if (token instanceof AdminToken) { - //管理员 - realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.ADMIN.getCode()); - } else if (token instanceof UserToken) { - //用户 - realm = (Realm)this.definedRealms.get(CommonEnumUtil.USER_TYPE.USER.getCode()); - } else { - throw new AuthenticationException("不存在TOKEN,请联系管理员("+token+")"); - } + String realmStrategy = (String) BaseThreadLocal.getData(PlatformConstWords.AUTH_REALM_CHOOSE); +// if (!StringUtils.isEmpty(realmStrategy)) { +// realm = (Realm) SpringContextsUtil.getBean(realmStrategy); +// } else { + if (token instanceof SaAdminToken) { + //超级管理员 + realm = (Realm) this.definedRealms.get(CommonEnumUtil.USER_TYPE.SA.getCode()); + } else if (token instanceof AdminToken) { + //管理员 + realm = (Realm) this.definedRealms.get(CommonEnumUtil.USER_TYPE.ADMIN.getCode()); + } else if (token instanceof UserToken) { + //用户 + realm = (Realm) this.definedRealms.get(CommonEnumUtil.USER_TYPE.USER.getCode()); + } else { + throw new AuthenticationException("不存在TOKEN,请联系管理员(" + token + ")"); + } +// } return this.doSingleRealmAuthentication(realm, token); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/E9AuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/E9AuthRealm.java new file mode 100644 index 0000000..d1a92d4 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/E9AuthRealm.java @@ -0,0 +1,44 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm.strategy; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @author Wynne.Lu + * @date 2021/1/18 下午2:32 + * @desc + */ +@Component +public class E9AuthRealm extends AuthorizingRealm { + + public static final Logger LOGGER = LoggerFactory.getLogger(E9AuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public E9AuthRealm(){ + //添加支持的token + this.setAuthenticationTokenClass(AdminToken.class); + } + + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return new SimpleAuthorizationInfo(); + } + + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) { + return new SimpleAuthenticationInfo(); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index c313303..a63006a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -2,13 +2,18 @@ package cn.estsh.i3plus.core.apiservice.controller.base; import cn.estsh.i3plus.core.api.iservice.base.ISynchronizedService; import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService; import cn.estsh.i3plus.core.api.iservice.busi.*; import cn.estsh.i3plus.core.apiservice.controller.busi.PersonnelController; import cn.estsh.i3plus.core.apiservice.controller.busi.SysUserInfoController; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; -import cn.estsh.i3plus.platform.common.tool.*; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; +import cn.estsh.i3plus.platform.common.tool.ServletRequestTool; +import cn.estsh.i3plus.platform.common.tool.StringTool; +import cn.estsh.i3plus.platform.common.tool.TimeTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.annotation.AnnoIgnoreLog; @@ -16,36 +21,67 @@ import cn.estsh.i3plus.pojo.base.bean.BaseConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.model.common.CloudPagerModel; import cn.estsh.i3plus.pojo.model.license.ImppLicense; +import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; import cn.estsh.i3plus.pojo.model.platform.UserDetailPagerModel; -import cn.estsh.i3plus.pojo.platform.bean.*; +import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; +import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.i3plus.pojo.platform.bean.SysLabelTemplate; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; +import cn.estsh.i3plus.pojo.platform.bean.SysLogUserLogin; +import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; +import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; +import cn.estsh.i3plus.pojo.platform.bean.SysUser; +import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.license.ImppLicenseTool; import cn.estsh.impp.framework.boot.license.serviceimpl.ImppLicenseDecoder; -import cn.estsh.impp.framework.boot.util.*; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.LocaleUtils; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import org.apache.commons.lang3.StringUtils; -import org.apache.shiro.authc.*; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.CredentialsException; +import org.apache.shiro.authc.IncorrectCredentialsException; +import org.apache.shiro.authc.LockedAccountException; +import org.apache.shiro.authc.UnknownAccountException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.BiFunction; import java.util.stream.Collectors; -import static cn.estsh.i3plus.platform.common.util.CommonConstWords.DEFAULT_LANGUAGE; - /** * @Description : * @Reference : @@ -100,6 +136,9 @@ public class WhiteController extends CoreBaseController { private ISysConfigService configService; @Autowired + private ISystemLoginService loginService; + + @Autowired private SysUserPasswordUtil userPasswordUtil; @Resource(name = CommonConstWords.IMPP_REDIS_RES) @@ -114,7 +153,6 @@ public class WhiteController extends CoreBaseController { @Autowired private RabbitTemplate rabbitTemplate; - @GetMapping(value = "/sys-locale-language/list") @ApiOperation(value = "查询可用语言", notes = "查询可用语言") public ResultBean listSysLocaleLanguage() { @@ -155,97 +193,79 @@ public class WhiteController extends CoreBaseController { } } + @GetMapping(value = "/auth/oss-login") + @ApiOperation(value = "登录", notes = "登录") + public ResultBean ossLogin(HttpServletRequest request, SystemLoginModel loginModel) throws NoSuchFieldException { + ValidatorBean.beginValid(loginModel) + .notNull("loginStrategy", loginModel.getLoginStrategy()) + .notNull("loginName", loginModel.getLoginName()); + String beanName = ImppEnumUtil.AUTH_LOGIN_STRATEGY.codeOfStrategyName(loginModel.getLoginStrategy()); + ISystemLoginStrategyService loginStrategyService = (ISystemLoginStrategyService) SpringContextsUtil.getBean(beanName); + + BaseThreadLocal.setData(PlatformConstWords.IS_OSS_LOGIN, true); + + return loginByStrategy(request, loginModel, loginStrategyService.login()); + } + @GetMapping(value = "/auth/login") - @ApiOperation(value = "登陆", notes = "登陆") + @ApiOperation(value = "登录", notes = "登录") public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, @RequestParam(required = false) String languageCode, @RequestParam(required = false) String deviceId) { - Long startTime = System.currentTimeMillis(); - startMultiService(); - licenseClickService.checkLicenseNumberLogin(); - - LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}", loginName, loginPwd, languageCode); - ResultBean result = null; - CommonEnumUtil.USER_LOGIN_STATUS userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS; + SystemLoginModel loginModel = new SystemLoginModel(loginName, loginPwd, languageCode, deviceId, ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode()); - try { - ValidatorBean.checkNotNull(languageCode, "语言不能为空"); - // TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息 - if ("null".equals(languageCode)) { - languageCode = DEFAULT_LANGUAGE; - } - - // 设置语言代码 - BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, languageCode); - - ValidatorBean.checkNotNull(loginName, "用户名不能为空"); - ValidatorBean.checkNotNull(loginPwd, "密码不能为空"); - - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); - if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { - logout(); - } + String beanName = ImppEnumUtil.AUTH_LOGIN_STRATEGY.codeOfStrategyName(loginModel.getLoginStrategy()); + ISystemLoginStrategyService loginStrategyService = (ISystemLoginStrategyService) SpringContextsUtil.getBean(beanName); - SessionUser user = userService.queryUserLogin(loginName.trim(), loginPwd.trim(), languageCode, getLoginPlatform().getValue(), deviceId); + return loginByStrategy(request, loginModel, loginStrategyService.login()); + } - String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId(); - redisCore.deleteKey(redisKey); -// LOGGER.info("会员登陆:{}",user); + private ResultBean loginByStrategy(HttpServletRequest request, SystemLoginModel loginModel, BiFunction loginStrategy) { + long startTime = System.currentTimeMillis(); + licenseClickService.checkLicenseNumberLogin(); - result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser()); - result.setUrl("/"); + LOGGER.info("用户登陆 loginName:{} loginPwd:{} languageCode:{}", loginModel.getLoginName(), loginModel.getLoginPwd(), loginModel.getLanguageCode()); + ResultBean result = null; + CommonEnumUtil.USER_LOGIN_STATUS userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS; - // 记录登录记录 - recordSysUserLog(user.getUser().getUserInfoId(), loginName, CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS.getValue()); - AuthUtil.setOrganize(user.getUser().getOrganize()); + try { + loginStrategy.apply(request, loginModel); } catch (IncorrectCredentialsException e) { result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD); - userPasswordUtil.checkLoginErrorNumber(loginName, result, e); + userPasswordUtil.checkLoginErrorNumber(loginModel.getLoginName(), result, e); userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.WRONG_PASSWORD; } catch (CredentialsException e) { // 用户名或密码错误 result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_NAME); - - // 记录登录记录 userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.WRONG_USERNAME_OR_PASSWORD; } catch (LockedAccountException e) { // 账号已锁定 result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_LOCKING); - - // 记录登录记录 userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.USER_LOGIN_LOCKING; } catch (UnknownAccountException e) { // 用户信息不存在 result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_INFO_NULL); - - // 记录登录记录 userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.USER_INFO_NULL; } catch (AuthenticationException e) { // 系统异常 result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD.getDescription()).setCode(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD.getCode()); result.setErrorMsg(e.getMessage()); - - // 记录登录记录 userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR; } catch (ImppBusiException e) { result = ResultBean.fail(e); - - // 记录登录记录 userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR; } catch (Exception e) { result = ResultBean.fail(e.getMessage()).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()) .setErrorMsg(LocaleUtils.getEnumLocaleResDesc(ImppExceptionEnum.SYSTEM_EXCEPTION, ImppExceptionEnum.SYSTEM_EXCEPTION.getDescription())); - - // 记录登录记录 userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR; } finally { // 记录登录记录 - recordSysUserLog(null, loginName, userLoginStatus.getValue()); + recordSysUserLog(null, loginModel.getLoginName(), userLoginStatus.getValue()); } - LOGGER.info("会员{}登陆登录完成 ,语言:{} , 登录耗时:{}", loginName, BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime)); + LOGGER.info("会员{}登陆登录完成 ,语言:{} , 登录耗时:{}", loginModel.getLoginName(), BaseThreadLocal.getThreadLanguageCode(), (System.currentTimeMillis() - startTime)); return result; } @@ -493,30 +513,6 @@ public class WhiteController extends CoreBaseController { Arrays.asList(CommonEnumUtil.LOG_LOGIN_PLATFORM.values())); } - /** - * 获取登录平台信息 - * - * @return - */ - private CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform() { - String value = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM); - if (StringUtils.isBlank(value)) { - value = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + ""; - } else { - try { - Integer.parseInt(value); - } catch (Exception e) { - throw ImppExceptionBuilder.newInstance() - .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) - .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode()) - .setErrorDetail("平台登录标识转换错误") - .setErrorSolution("请重新操作") - .build(); - } - } - CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(value)); - return platform == null ? CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE : platform; - } @GetMapping("/sys-organize/list") @ApiOperation(value = "获取全部组织", notes = "获取全部组织") diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java index ed5b460..d23efc8 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -4,7 +4,8 @@ import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; import cn.estsh.i3plus.core.api.iservice.busi.ISysUserPasswordService; import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; -import cn.estsh.i3plus.platform.common.tool.EncryptTool; +import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; +import cn.estsh.i3plus.platform.common.tool.CookieTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; @@ -16,13 +17,11 @@ import cn.estsh.i3plus.pojo.platform.bean.SysUserPassword; import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; -import cn.estsh.impp.framework.boot.util.ImppLdapUtils; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.ImppSwitchUtil; -import cn.estsh.impp.framework.boot.util.ValidatorBean; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.math.NumberUtils; import org.apache.shiro.authc.CredentialsException; import org.apache.shiro.authc.IncorrectCredentialsException; import org.apache.shiro.authc.LockedAccountException; @@ -33,8 +32,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.io.UnsupportedEncodingException; -import java.security.NoSuchAlgorithmException; +import javax.servlet.http.HttpServletRequest; import java.util.Objects; /** @@ -66,65 +64,65 @@ public class SystemLoginService implements ISystemLoginService { protected ImppRedis redisCore; @Override - @ApiOperation(value = "用户登录",notes = "普通用户登录") + @ApiOperation(value = "用户登录", notes = "普通用户登录") public SessionUser queryUserLogin(String loginName, String loginPwd, String languageCode) { //生成令牌 - UserToken ut = new UserToken(loginName,loginPwd,languageCode); + UserToken ut = new UserToken(loginName, loginPwd, languageCode); //token验证 return AuthUtil.login(ut); } @Override - @ApiOperation(value = "用户登录",notes = "管理用户登录") + @ApiOperation(value = "用户登录", notes = "管理用户登录") public SessionUser queryAdminLogin(String loginName, String loginPwd, String languageCode) { //生成令牌 - AdminToken adminToken = new AdminToken(loginName,loginPwd,languageCode); + AdminToken adminToken = new AdminToken(loginName, loginPwd, languageCode); //token验证 return AuthUtil.login(adminToken); } @Override - @ApiOperation(value = "封装用户",notes = "封装普通用户信息") + @ApiOperation(value = "封装用户", notes = "封装普通用户信息") public SessionUser queryCheckUserLogin(UserToken userToken) { //验证用户 - SysUser user = getUserLoginInfo(userToken.getLoginName(),userToken.getLoginPwd()); - LOGGER.info("【验证用户checkUserLogin】{}",user); + SysUser user = getUserLoginInfo(userToken.getLoginName(), userToken.getLoginPwd()); + LOGGER.info("【验证用户checkUserLogin】{}", user); //用户单地登录 - return packSessionUser(user,CommonEnumUtil.USER_TYPE.USER.getCode(),userToken.getLanguageCode()); + return packSessionUser(user, CommonEnumUtil.USER_TYPE.USER.getCode(), userToken.getLanguageCode()); } @Override - @ApiOperation(value = "封装用户",notes = "封装管理员信息") + @ApiOperation(value = "封装用户", notes = "封装管理员信息") public SessionUser queryCheckAdminLogin(AdminToken adminToken) { //验证用户 - SysUser user = getUserLoginInfo(adminToken.getLoginName(),adminToken.getLoginPwd()); + SysUser user = getUserLoginInfo(adminToken.getLoginName(), adminToken.getLoginPwd()); //未抛异常,封装用户 - return packSessionUser(user,CommonEnumUtil.USER_TYPE.ADMIN.getCode(),adminToken.getLanguageCode()); + return packSessionUser(user, CommonEnumUtil.USER_TYPE.ADMIN.getCode(), adminToken.getLanguageCode()); } @Override - @ApiOperation(value = "封装用户",notes = "封装超级管理员信息") + @ApiOperation(value = "封装用户", notes = "封装超级管理员信息") public SessionUser queryCheckSaAdminLogin(SaAdminToken saAdminToken) { - SysUser user = getUserLoginInfo(saAdminToken.getLoginName(),saAdminToken.getLoginPwd()); - return packSessionUser(user,CommonEnumUtil.USER_TYPE.SA.getCode(),saAdminToken.getLanguageCode()); + SysUser user = getUserLoginInfo(saAdminToken.getLoginName(), saAdminToken.getLoginPwd()); + return packSessionUser(user, CommonEnumUtil.USER_TYPE.SA.getCode(), saAdminToken.getLanguageCode()); } @Override - @ApiOperation(value = "登录密码错误",notes = "登录密码错误记录错误次数功能") - public Integer doLoginPasswordError(String loginName,String sessionId) { + @ApiOperation(value = "登录密码错误", notes = "登录密码错误记录错误次数功能") + public Integer doLoginPasswordError(String loginName, String sessionId) { SysUser user = sysUserRDao.getByProperty(new String[]{"userLoginName", "isValid"}, new Object[]{loginName, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}); - if(user != null){ + if (user != null) { String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + sessionId + "_" + user.getId(); Object redisValue = redisCore.getObject(redisKey); Integer num = redisValue == null ? 1 : Integer.parseInt(redisValue.toString()) + 1; - if(num >= CommonConstWords.USER_LOGIN_ERROR_MAX_NUM){ + if (num >= CommonConstWords.USER_LOGIN_ERROR_MAX_NUM) { user.setUserStatus(CommonEnumUtil.USER_STATUS.LOCKING.getValue()); redisCore.deleteKey(redisKey); sysUserRDao.update(user); - }else{ - redisCore.putObject(redisKey,num,CommonConstWords.REDIS_TIME_DAY_ONE); + } else { + redisCore.putObject(redisKey, num, CommonConstWords.REDIS_TIME_DAY_ONE); } return num; } @@ -132,39 +130,67 @@ public class SystemLoginService implements ISystemLoginService { } /** + * 获取登录平台信息 + * + * @return + */ + @Override + public CommonEnumUtil.LOG_LOGIN_PLATFORM getLoginPlatform(HttpServletRequest request) { + String value = CookieTool.getCookieValue(request, CommonConstWords.SESSION_LOGIN_PLATFORM); + if (StringUtils.isBlank(value)) { + value = CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE.getValue() + ""; + } else { + try { + Integer.parseInt(value); + } catch (Exception e) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_FORMAT.getCode()) + .setErrorDetail("平台登录标识转换错误") + .setErrorSolution("请重新操作") + .build(); + } + } + CommonEnumUtil.LOG_LOGIN_PLATFORM platform = CommonEnumUtil.LOG_LOGIN_PLATFORM.valueOf(Integer.parseInt(value)); + return platform == null ? CommonEnumUtil.LOG_LOGIN_PLATFORM.PC_IMPP_CORE : platform; + } + + + /** * 根据用户名密码查询用户 + * * @param loginName * @param pwd * @return */ - public SysUser getUserLoginInfo(String loginName,String pwd) { + public SysUser getUserLoginInfo(String loginName, String pwd) { SysUser user = sysUserRDao.getByProperty( - new String[]{"userLoginName","isValid"}, - new Object[]{loginName,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + new String[]{"userLoginName", "isValid"}, + new Object[]{loginName, CommonEnumUtil.IS_VAILD.VAILD.getValue()}); - if(user == null){ //用户不存在 + if (user == null) { //用户不存在 throw new CredentialsException("用户不存在"); } - if(user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()){ + if (user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()) { throw new LockedAccountException("账号已被锁定"); } // 登录AD 域检查 - if(ImppSwitchUtil.isLoginActiveDirectory()){ + if (ImppSwitchUtil.isLoginActiveDirectory()) { userPasswordUtil.checkActiveDirectory(user); return user; } SysUserPassword password = null; - String passwordStr = user.getUserLoginPassword(); + String passwordStr = user.getUserLoginPassword(); try { - if(Objects.nonNull(user.getUserLoginPasswordId()) && user.getUserLoginPasswordId() > 0){ + if (Objects.nonNull(user.getUserLoginPasswordId()) && user.getUserLoginPasswordId() > 0) { password = passwordService.get(user.getUserLoginPasswordId()); - }else{ - if(StringUtils.equals(user.getUserLoginPassword(),SysUserPasswordUtil.encoder(pwd))){ + } else { + if (StringUtils.equals(user.getUserLoginPassword(), SysUserPasswordUtil.encoder(pwd))) { SysUserPassword userPassword = new SysUserPassword(user.getId(), SysUserPasswordUtil.encoder(pwd)); - ConvertBean.serviceModelInitialize(userPassword,user.getUserName()); + ConvertBean.serviceModelInitialize(userPassword, user.getUserName()); password = passwordService.insert(userPassword); user.setUserLoginPassword(null); @@ -173,12 +199,12 @@ public class SystemLoginService implements ISystemLoginService { sysUserRDao.save(user); } } - - if(Objects.nonNull(password)){ + + if (Objects.nonNull(password)) { passwordStr = password.getUserPassword(); } - if (StringUtils.equals(passwordStr,SysUserPasswordUtil.encoder(pwd))){ + if (StringUtils.equals(passwordStr, SysUserPasswordUtil.encoder(pwd))) { userPasswordUtil.checkSysUserLogin(user); return user; } @@ -194,12 +220,13 @@ public class SystemLoginService implements ISystemLoginService { /** * 封装用户登陆信息 + * * @param user * @param userType * @param languageCode * @return */ - private SessionUser packSessionUser(SysUser user,String userType, String languageCode) { + private SessionUser packSessionUser(SysUser user, String userType, String languageCode) { SessionUser sessionUser = new SessionUser(); sessionUser.setLanguageCode(languageCode); sessionUser.setUserName(user.getUserName()); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java new file mode 100644 index 0000000..001b050 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java @@ -0,0 +1,87 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.base.login.strategy; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService; +import cn.estsh.i3plus.core.api.iservice.busi.ILicenseClickService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.function.BiFunction; + +import static cn.estsh.i3plus.platform.common.util.CommonConstWords.DEFAULT_LANGUAGE; + +/** + * @author Wynne.Lu + * @date 2021/1/18 下午4:39 + * @desc + */ +@Slf4j +@Service +public class DefaultLoginStrategy implements ISystemLoginStrategyService { + + @Resource(name = "redisCore") + protected ImppRedis redisCore; + + @Autowired + private ILicenseClickService licenseClickService; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISystemLoginService loginService; + + @Override + public BiFunction login() { + return (request, loginModel) -> { + ResultBean result; + ValidatorBean.checkNotNull(loginModel.getLanguageCode(), "语言不能为空"); + // TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息 + if ("null".equals(loginModel.getLanguageCode())) { + loginModel.setLanguageCode(DEFAULT_LANGUAGE); + } + + // 设置语言代码 + BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); + + ValidatorBean.checkNotNull(loginModel.getLoginName(), "用户名不能为空"); + ValidatorBean.checkNotNull(loginModel.getLoginPwd(), "密码不能为空"); + + int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + AuthUtil.logout(); + } + + SessionUser user = userService.queryUserLogin( + loginModel.getLoginName().trim(), + loginModel.getLoginPwd().trim(), + loginModel.getLanguageCode(), + loginService.getLoginPlatform(request).getValue(), + loginModel.getDeviceId() + ); + + String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId(); + redisCore.deleteKey(redisKey); + + result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser()); + result.setUrl("/"); + + AuthUtil.setOrganize(user.getUser().getOrganize()); + return result; + }; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java new file mode 100644 index 0000000..bd6d3d9 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java @@ -0,0 +1,104 @@ +package cn.estsh.i3plus.core.apiservice.serviceimpl.base.login.strategy; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginStrategyService; +import cn.estsh.i3plus.core.api.iservice.busi.ILicenseClickService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; +import cn.estsh.i3plus.platform.common.tool.ServletRequestTool; +import cn.estsh.i3plus.platform.common.util.CommonConstWords; +import cn.estsh.i3plus.platform.common.util.PlatformConstWords; +import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.util.ImppRedis; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Arrays; +import java.util.function.BiFunction; + +import static cn.estsh.i3plus.platform.common.util.CommonConstWords.DEFAULT_LANGUAGE; + +/** + * @author Wynne.Lu + * @date 2021/1/18 上午10:53 + * @desc + */ +@Lazy +@Slf4j +@Service +public class E9LoginStrategy implements ISystemLoginStrategyService { + + @Resource(name = "redisCore") + protected ImppRedis redisCore; + + @Autowired + private ILicenseClickService licenseClickService; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISystemLoginService loginService; + + @Override + public BiFunction login() { + return (request, loginModel) -> { + boolean isRequestFromSpecificIp = validateHost(request); + if (!isRequestFromSpecificIp) { + return ResultBean.fail("单点登录请求未从指定授权服务器发送,校验失败。"); + } + licenseClickService.checkLicenseNumberLogin(); + ValidatorBean.checkNotNull(loginModel.getLanguageCode(), "语言不能为空"); + // TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息 + if ("null".equals(loginModel.getLanguageCode())) { + loginModel.setLanguageCode(DEFAULT_LANGUAGE); + } + + // 设置语言代码 + BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); + BaseThreadLocal.setData(PlatformConstWords.AUTH_REALM_CHOOSE, ImppEnumUtil.AUTH_REALM_STRATEGY.PANASONIC.getStrategyName()); + + int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { + AuthUtil.logout(); + } + + SessionUser user = userService.queryUserLogin( + loginModel.getLoginName().trim(), + loginModel.getLoginPwd() == null ? null : loginModel.getLoginPwd().trim(), + loginModel.getLanguageCode(), + loginService.getLoginPlatform(request).getValue(), + loginModel.getDeviceId() + ); + + String redisKey = CommonConstWords.USER_LOGIN_ERROR + "_" + user.getUser().getId(); + redisCore.deleteKey(redisKey); + + ResultBean result = new ResultBean(true, AuthUtil.getSession().getId().toString(), AuthUtil.getSessionUser()); + result.setUrl("/"); + + AuthUtil.setOrganize(user.getUser().getOrganize()); + + return null; + }; + } + + private boolean validateHost(HttpServletRequest request) { + final String delimiter = ","; + String hostsConfig = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.OSS_REQUEST_HOST); + String[] hosts = hostsConfig.split(delimiter); + String requestHost = ServletRequestTool.getRequestHost(request); + return Arrays.stream(hosts).anyMatch(d -> requestHost.equals(d)); + } +} From 4193e956ab086540c1c7a3ab7da2431ef9c189e4 Mon Sep 17 00:00:00 2001 From: wynne1005 Date: Tue, 19 Jan 2021 16:11:03 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/iservice/base/ISystemLoginService.java | 24 ++ .../core/api/iservice/busi/ISysUserService.java | 134 +++++---- modules/i3plus-core-apiservice/pom.xml | 6 + .../apiservice/auth/ShiroAuthConfiguration.java | 68 ++++- .../apiservice/auth/realm/DefaultModularRealm.java | 61 ++-- .../{E9AuthRealm.java => e9/E9AdminAuthRealm.java} | 37 ++- .../auth/realm/strategy/e9/E9SaAuthRealm.java | 50 ++++ .../auth/realm/strategy/e9/E9UserAuthRealm.java | 57 ++++ .../controller/base/WhiteController.java | 45 ++- .../serviceimpl/base/SystemLoginService.java | 66 ++++- .../base/login/strategy/DefaultLoginStrategy.java | 2 +- .../base/login/strategy/E9LoginStrategy.java | 10 +- .../serviceimpl/busi/SysUserService.java | 316 ++++++++++----------- .../src/main/resources/application-dev.properties | 2 +- .../src/main/resources/application.properties | 2 +- pom.xml | 7 + 16 files changed, 591 insertions(+), 296 deletions(-) rename modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/{E9AuthRealm.java => e9/E9AdminAuthRealm.java} (52%) create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9SaAuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9UserAuthRealm.java diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java index 9fe6508..eb5dcb5 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginService.java @@ -66,6 +66,30 @@ public interface ISystemLoginService { */ @ApiOperation(value = "封装用户", notes = "封装超级管理员信息") SessionUser queryCheckSaAdminLogin(SaAdminToken authenticationToken); + /** + * E9用户单点登录 + * + * @param userToken 用户token + * @return 用户会话 + */ + @ApiOperation(value = "封装用户", notes = "封装普通用户信息") + SessionUser queryCheckE9UserLogin(UserToken userToken); + /** + * E9Admin单点登录 + * + * @param adminToken admin token + * @return 用户会话 + */ + @ApiOperation(value = "封装用户", notes = "封装管理员信息") + SessionUser queryCheckE9AdminLogin(AdminToken adminToken); + + /** + * E9 SA单点登录 + * @param saAdminToken sa token + * @return 用户会话 + */ + @ApiOperation(value = "封装用户", notes = "封装超级管理员信息") + SessionUser queryCheckE9SaAdminLogin(SaAdminToken saAdminToken); /** * 记录登录错误 diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java index d330fdd..df2219e 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysUserService.java @@ -20,123 +20,137 @@ public interface ISysUserService { /** * 账号登录 - * @param loginName 登录名 - * @param password 登录密码 - * @param languageCode 界面语言 + * + * @param loginName 登录名 + * @param password 登录密码 + * @param languageCode 界面语言 * @return */ - @ApiOperation(value = "账号登录",notes = "普通账号登录功能") - SessionUser queryUserLogin(String loginName, String password, String languageCode,Integer loginPlatform,String deviceId) throws AuthenticationException; + @ApiOperation(value = "账号登录", notes = "普通账号登录功能") + SessionUser loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException; - @ApiOperation(value = "获取Token",notes = "根据登录名判断是否是管理员") - BaseToken getToken(String loginName, String password, String languageCode,Integer loginPlatform); + @ApiOperation(value = "获取Token", notes = "根据登录名判断是否是管理员") + BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform); /** * 修改状态 - * @param id 修改账号状态 - * @param status 状态 - * @param user 当前会话账号 + * + * @param id 修改账号状态 + * @param status 状态 + * @param user 当前会话账号 * @return */ - @ApiOperation(value = "修改状态",notes = "修改指定账号状态") + @ApiOperation(value = "修改状态", notes = "修改指定账号状态") void updateSysUserStatus(Long id, int status, SessionUser user); - @ApiOperation(value = "锁定用户",notes = "锁定用户") + @ApiOperation(value = "锁定用户", notes = "锁定用户") void doLockSysUserById(Long id); /** * 批量修改账号状态 + * * @param ids * @param status * @param user */ - @ApiOperation(value = "修改状态",notes = "批量修改指定账号状态") + @ApiOperation(value = "修改状态", notes = "批量修改指定账号状态") void updateBatchSysUserStatus(Long[] ids, int status, SessionUser user); /** * 修改账号信息 + * * @param sysUser */ - @ApiOperation(value = "修改账号信息",notes = "修改账号信息") + @ApiOperation(value = "修改账号信息", notes = "修改账号信息") void updateSysUser(SysUser sysUser); /** * 修改账号密码 - * @param userId 需要修改的账号ID - * @param password 旧密码 - * @param newPwd 新密码 + * + * @param userId 需要修改的账号ID + * @param password 旧密码 + * @param newPwd 新密码 */ - @ApiOperation(value = "修改号密码",notes = "修改账号的密码信息") - void updateSysUserPassword(Long userId,String password,String newPwd) throws Exception; + @ApiOperation(value = "修改号密码", notes = "修改账号的密码信息") + void updateSysUserPassword(Long userId, String password, String newPwd) throws Exception; /** * 刷新账号登录信息 + * * @param userId */ - @ApiOperation(value = "刷新账号",notes = "刷新账号登录信息") + @ApiOperation(value = "刷新账号", notes = "刷新账号登录信息") void refreshUserLoginInformation(Long userId); /** * 新增账号信息 + * * @param sysUser 新增账号 * @return */ - @ApiOperation(value = "新增账号",notes = "新增账号信息") - SysUser insertSysUser(SysUser sysUser)throws Exception; + @ApiOperation(value = "新增账号", notes = "新增账号信息") + SysUser insertSysUser(SysUser sysUser) throws Exception; /** * 添加 账号登录信息 + * * @param sysLogUserLogin * @return */ - @ApiOperation(value = "新增登录日志",notes = "新增登录日志信息") + @ApiOperation(value = "新增登录日志", notes = "新增登录日志信息") SysLogUserLogin insertSysLogUserLogin(SysLogUserLogin sysLogUserLogin); /** * 刷新账号角色关系 + * * @param sysUser * @param roleIds * @param userName */ - @ApiOperation(value = "刷新账号",notes = "刷新账号角色关系") - void refreshSysRefUserRole(SysUser sysUser, Long[] roleIds , String userName); + @ApiOperation(value = "刷新账号", notes = "刷新账号角色关系") + void refreshSysRefUserRole(SysUser sysUser, Long[] roleIds, String userName); /** * 根据Key 删除数据 + * * @param id * @return */ - @ApiOperation(value = "删除账号",notes = "根据ID 删除张哈信息") + @ApiOperation(value = "删除账号", notes = "根据ID 删除张哈信息") void deleteSysUserById(Long id); /** * 批量删除账号 逻辑删除 - * @param ids 需要删除的账号ID - * @param user 当前会话账号 + * + * @param ids 需要删除的账号ID + * @param user 当前会话账号 */ - @ApiOperation(value = "删除账号",notes = "根据ID 批量删除张哈信息") + @ApiOperation(value = "删除账号", notes = "根据ID 批量删除张哈信息") void deleteBatchSysUserById(Long[] ids, SessionUser user); /** * 查询所有数据 + * * @return */ - @ApiOperation(value = "查询所有",notes = "查询所有账号信息") + @ApiOperation(value = "查询所有", notes = "查询所有账号信息") List list(); /** * 查询所有数据 + * * @return */ - @ApiOperation(value = "查询所有",notes = "查询所有账号信息") + @ApiOperation(value = "查询所有", notes = "查询所有账号信息") List listByUserOrganizeCode(); /** * 根据角色查询用户信息 + * * @param roleId 角色ID * @return 获取用户ID 集合 */ - @ApiOperation(value = "查询用户ID 集合",notes = "根据角色Id 查询用户ID集合") + @ApiOperation(value = "查询用户ID 集合", notes = "根据角色Id 查询用户ID集合") List findSysUserIdListByRoleId(Long roleId); /*** @@ -144,105 +158,117 @@ public interface ISysUserService { * @param idList 部门集合 * @return 用户ID集合 */ - @ApiOperation(value = "查询用户ID 集合",notes = "根据部门Id 查询用户ID集合") + @ApiOperation(value = "查询用户ID 集合", notes = "根据部门Id 查询用户ID集合") List findSysUserIdListByDepartmentId(List idList); /** * 复杂查询 + * * @param user * @param pager * @return */ - @ApiOperation(value = "账号查询",notes = "查询账号信息-复杂查询") + @ApiOperation(value = "账号查询", notes = "查询账号信息-复杂查询") ListPager querySysUserByPager(SysUser user, Pager pager); - @ApiOperation(value = "账号查询",notes = "查询账号信息-复杂查询") - ListPager querySysUserByPager(SysUser user,List idList, Pager pager); + @ApiOperation(value = "账号查询", notes = "查询账号信息-复杂查询") + ListPager querySysUserByPager(SysUser user, List idList, Pager pager); /** * 根据id 数据 + * * @param id * @return */ - @ApiOperation(value = "账号查询",notes = "查询账号信息-根据ID查询") + @ApiOperation(value = "账号查询", notes = "查询账号信息-根据ID查询") SysUser getSysUserById(Long id); /** * 获取账号详细信息 + * * @param id * @return */ - @ApiOperation(value = "获取用户信息",notes = "查询用户信息-根据ID查询") + @ApiOperation(value = "获取用户信息", notes = "查询用户信息-根据ID查询") SysUserInfo getSysUserInfoById(Long id); /** * 根据登录名称 获取账号信息 + * * @param loginName * @return */ - @ApiOperation(value = "获取账号信息",notes = "查询用户信息-根据登录名称查询") + @ApiOperation(value = "获取账号信息", notes = "查询用户信息-根据登录名称查询") SysUser getSysUserByLoginName(String loginName); /** * 根据手机号查询账号 + * * @param email * @return */ - @ApiOperation(value = "获取账号信息",notes = "查询用户信息-根据邮箱查询") + @ApiOperation(value = "获取账号信息", notes = "查询用户信息-根据邮箱查询") SysUser getSysUserByEmail(String email); /** - * 根据手机号查询账号 + * 根据手机号查询账号 + * * @param phone * @return */ - @ApiOperation(value = "获取账号信息",notes = "查询用户信息-根据手机查询") + @ApiOperation(value = "获取账号信息", notes = "查询用户信息-根据手机查询") SysUser getSysUserByPhone(String phone); /** * 查出账号角色关系 + * * @param userId * @return */ - @ApiOperation(value = "获取用户角色信息",notes = "获取指定账号的所有角色信息") + @ApiOperation(value = "获取用户角色信息", notes = "获取指定账号的所有角色信息") List findSysRefUserRoleByUserId(Long userId); /** * 判断账号名是否存在 + * * @param userLoginName * @param id * @return */ - @ApiOperation(value = "账号检查",notes = "检查账号的登录名是否重复") + @ApiOperation(value = "账号检查", notes = "检查账号的登录名是否重复") boolean checkSysUserLoginName(String userLoginName, long id); /** * 判断邮箱是否存在 + * * @param email * @param id * @return */ - @ApiOperation(value = "账号检查",notes = "检查账号的邮箱是否重复") - boolean checkSysUserEmail(String email,long id); + @ApiOperation(value = "账号检查", notes = "检查账号的邮箱是否重复") + boolean checkSysUserEmail(String email, long id); /** * 判断手机是否存在 + * * @param phone * @param id * @return */ - @ApiOperation(value = "账号检查",notes = "检查账号的手机号是否重复") - boolean checkSysUserPhone(String phone,long id); + @ApiOperation(value = "账号检查", notes = "检查账号的手机号是否重复") + boolean checkSysUserPhone(String phone, long id); /** * 账号唯一教研 + * * @param user */ - @ApiOperation(value = "账号检查",notes = "检查账号信息唯一(登录名、邮箱、手机号)") + @ApiOperation(value = "账号检查", notes = "检查账号信息唯一(登录名、邮箱、手机号)") void checkSysUserOnly(SysUser user); /** * 获取用户数量 + * * @return 用户数量 */ @ApiOperation(value = "查询账户数量") @@ -250,23 +276,25 @@ public interface ISysUserService { /** * 登录封装账号信息 + * * @param sessionUser * @param user * @param userType * @param languageCode * @return */ - @ApiOperation(value = "封装用户信息",notes = "封装登录完成后的用户信息(角色、权限、部门、组织、岗位)") - SessionUser packSessionUser(SessionUser sessionUser, SysUser user, Integer userType,Integer loginPlatform, String languageCode, String deviceId); + @ApiOperation(value = "封装用户信息", notes = "封装登录完成后的用户信息(角色、权限、部门、组织、岗位)") + SessionUser packSessionUser(SessionUser sessionUser, SysUser user, Integer userType, Integer loginPlatform, String languageCode, String deviceId); - @ApiOperation(value = "封装用户信息",notes = "封装用户列表分页信息") + @ApiOperation(value = "封装用户信息", notes = "封装用户列表分页信息") SessionUser packPageSessionUser(SessionUser sessionUser, SysUser user); - @ApiOperation(value = "封装用户信息",notes = "封装用户系统配置信息") + @ApiOperation(value = "封装用户信息", notes = "封装用户系统配置信息") SessionUser packConfigSessionUser(SessionUser sessionUser, SysUser user); /** * 根据id查询用户信息 + * * @param ids 用户id * @return 查询结果 */ diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 37a853f..c6dc67d 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -225,6 +225,12 @@ elasticsearch 7.5.1 + + + org.springframework.boot + spring-boot-starter-data-elasticsearch + 2.4.2 + diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java index 1c759b4..c87079e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/ShiroAuthConfiguration.java @@ -4,8 +4,13 @@ import cn.estsh.i3plus.core.apiservice.auth.realm.AdminAuthRealm; import cn.estsh.i3plus.core.apiservice.auth.realm.DefaultModularRealm; import cn.estsh.i3plus.core.apiservice.auth.realm.SaAuthRealm; import cn.estsh.i3plus.core.apiservice.auth.realm.UserAuthRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9.E9AdminAuthRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9.E9SaAuthRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9.E9UserAuthRealm; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.RoleRealmModel; import cn.estsh.impp.framework.boot.auth.filter.AdminFilter; import cn.estsh.impp.framework.boot.auth.filter.SaAdminFilter; import cn.estsh.impp.framework.boot.auth.filter.UserFilter; @@ -26,9 +31,13 @@ import org.springframework.context.annotation.Configuration; import javax.annotation.Resource; import javax.servlet.Filter; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description : shiro权限配置 @@ -69,41 +78,72 @@ public class ShiroAuthConfiguration { private DefaultWebSessionManager getSessionManage; @Bean - public AdminAuthRealm adminAuthRealm(){ + public AdminAuthRealm adminAuthRealm() { return new AdminAuthRealm(); } @Bean - public SaAuthRealm saAuthRealm(){ + public SaAuthRealm saAuthRealm() { return new SaAuthRealm(); } @Bean - public UserAuthRealm userAuthRealm(){ + public UserAuthRealm userAuthRealm() { return new UserAuthRealm(); } - public Map supportRealmMap(){ + @Bean + public E9AdminAuthRealm e9AdminAuthRealm() { + return new E9AdminAuthRealm(); + } + + @Bean + public E9SaAuthRealm e9SaAuthRealm() { + return new E9SaAuthRealm(); + } + + @Bean + public E9UserAuthRealm e9UserAuthRealm() { + return new E9UserAuthRealm(); + } + + public Map supportRealmMap() { //支持的授权规则 - Map realms = new HashMap(8); - realms.put(CommonEnumUtil.USER_TYPE.USER.getCode(),userAuthRealm()); - realms.put(CommonEnumUtil.USER_TYPE.ADMIN.getCode(),adminAuthRealm()); - realms.put(CommonEnumUtil.USER_TYPE.SA.getCode(),saAuthRealm()); + Map realms = new HashMap(8); + + RoleRealmModel defaultRoleRealmModel = RoleRealmModel.builder() + .userRealm(userAuthRealm()) + .adminRealm(adminAuthRealm()) + .saRealm(saAuthRealm()).build(); + realms.put(ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode(), defaultRoleRealmModel); + + RoleRealmModel e9RoleRealmModel = RoleRealmModel.builder() + .userRealm(e9UserAuthRealm()) + .adminRealm(e9AdminAuthRealm()) + .saRealm(e9SaAuthRealm()).build(); + realms.put(ImppEnumUtil.AUTH_LOGIN_STRATEGY.E9.getCode(), e9RoleRealmModel); return realms; } @Bean - public ModularRealmAuthenticator modularRealmAuthenticator(){ - return new DefaultModularRealm(supportRealmMap()); + public ModularRealmAuthenticator modularRealmAuthenticator() { + return new DefaultModularRealm(supportRealmMap()); } @Bean - public SecurityManager securityManager(){ + public SecurityManager securityManager() { LOGGER.info("【app-shiro-加载securityManager】"); - DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setAuthenticator(modularRealmAuthenticator()); - securityManager.setRealms(supportRealmMap().values()); + + List allRealmBeans = new ArrayList<>(); + supportRealmMap().values().forEach(d -> { + allRealmBeans.add(d.getUserRealm()); + allRealmBeans.add(d.getAdminRealm()); + allRealmBeans.add(d.getSaRealm()); + }); + securityManager.setRealms(allRealmBeans); securityManager.setCacheManager(getEhCacheManage); //缓存管理 securityManager.setSessionManager(getSessionManage); //会话管理 //securityManager.setRememberMeManager(getRememberManager()); @@ -138,7 +178,7 @@ public class ShiroAuthConfiguration { return factoryBean; } - /** 缓存等配置在impp平台中设置 **/ + /** 缓存等配置在impp平台中设置 **/ // /** // * 缓存管理 // * @return diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java index 6290fbd..c052b90 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/DefaultModularRealm.java @@ -2,10 +2,12 @@ package cn.estsh.i3plus.core.apiservice.auth.realm; import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; -import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import cn.estsh.i3plus.pojo.model.platform.RoleRealmModel; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; @@ -26,9 +28,10 @@ import java.util.Map; **/ public class DefaultModularRealm extends ModularRealmAuthenticator { private static final Logger LOGGER = LoggerFactory.getLogger(DefaultModularRealm.class); - private Map definedRealms; - public DefaultModularRealm(Map definedRealms) { + private Map definedRealms; + + public DefaultModularRealm(Map definedRealms) { this.definedRealms = definedRealms; } @@ -37,38 +40,40 @@ public class DefaultModularRealm extends ModularRealmAuthenticator { return super.doMultiRealmAuthentication(realms, token); } - public Map getDefinedRealms() { - return this.definedRealms; - } - - public void setDefinedRealms(Map definedRealms) { - this.definedRealms = definedRealms; - } - @Override protected AuthenticationInfo doAuthenticate(AuthenticationToken token) throws AuthenticationException { Realm realm; - String realmStrategy = (String) BaseThreadLocal.getData(PlatformConstWords.AUTH_REALM_CHOOSE); -// if (!StringUtils.isEmpty(realmStrategy)) { -// realm = (Realm) SpringContextsUtil.getBean(realmStrategy); -// } else { - if (token instanceof SaAdminToken) { - //超级管理员 - realm = (Realm) this.definedRealms.get(CommonEnumUtil.USER_TYPE.SA.getCode()); - } else if (token instanceof AdminToken) { - //管理员 - realm = (Realm) this.definedRealms.get(CommonEnumUtil.USER_TYPE.ADMIN.getCode()); - } else if (token instanceof UserToken) { - //用户 - realm = (Realm) this.definedRealms.get(CommonEnumUtil.USER_TYPE.USER.getCode()); - } else { - throw new AuthenticationException("不存在TOKEN,请联系管理员(" + token + ")"); - } -// } + RoleRealmModel roleRealmModel; + String realmStrategy = (String) BaseThreadLocal.getData(PlatformConstWords.AUTH_LOGIN_STRATEGY); + + if (StringUtils.isEmpty(realmStrategy)) { + roleRealmModel = this.definedRealms.get(ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode()); + } else { + roleRealmModel = this.definedRealms.get(realmStrategy); + } + + realm = chooseRealmByUserType(token, roleRealmModel); return this.doSingleRealmAuthentication(realm, token); } + private Realm chooseRealmByUserType(AuthenticationToken token, RoleRealmModel roleRealmModel) { + Realm realm; + if (token instanceof SaAdminToken) { + //超级管理员 + realm = roleRealmModel.getSaRealm(); + } else if (token instanceof AdminToken) { + //管理员 + realm = roleRealmModel.getAdminRealm(); + } else if (token instanceof UserToken) { + //用户 + realm = roleRealmModel.getUserRealm(); + } else { + throw new AuthenticationException("不存在TOKEN,请联系管理员(" + token + ")"); + } + return realm; + } + @Override protected AuthenticationInfo doSingleRealmAuthentication(Realm realm, AuthenticationToken token) { if (!realm.supports(token)) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/E9AuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9AdminAuthRealm.java similarity index 52% rename from modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/E9AuthRealm.java rename to modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9AdminAuthRealm.java index d1a92d4..9137c7c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/E9AuthRealm.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9AdminAuthRealm.java @@ -1,7 +1,9 @@ -package cn.estsh.i3plus.core.apiservice.auth.realm.strategy; +package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9; import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; @@ -12,33 +14,42 @@ import org.apache.shiro.subject.PrincipalCollection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; /** - * @author Wynne.Lu - * @date 2021/1/18 下午2:32 - * @desc - */ -@Component -public class E9AuthRealm extends AuthorizingRealm { - - public static final Logger LOGGER = LoggerFactory.getLogger(E9AuthRealm.class); + * @Description : 验证规则 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 14:04 + * @Modify: + **/ +public class E9AdminAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(E9AdminAuthRealm.class); @Autowired private ISystemLoginService systemLoginService; - public E9AuthRealm(){ + public E9AdminAuthRealm() { //添加支持的token this.setAuthenticationTokenClass(AdminToken.class); } + //权限验证 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { return new SimpleAuthorizationInfo(); } + //令牌确认 @Override - protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) { - return new SimpleAuthenticationInfo(); + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + try { + //管理员令牌 + SessionUser sessionUser = systemLoginService.queryCheckE9AdminLogin((AdminToken) authenticationToken); + LOGGER.info("管理员令牌验证:{}", sessionUser); + return new SimpleAuthenticationInfo(sessionUser, ((AdminToken) authenticationToken).getLoginName(), this.getName()); + } catch (Exception e) { + e.printStackTrace(); + throw new AuthenticationException(e.getMessage()); + } } } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9SaAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9SaAuthRealm.java new file mode 100644 index 0000000..b543f3f --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9SaAuthRealm.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.pojo.base.shirotoken.SaAdminToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description : 验证规则 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 14:04 + * @Modify: + **/ +public class E9SaAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(E9SaAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public E9SaAuthRealm() { + //添加支持的token + this.setAuthenticationTokenClass(SaAdminToken.class); + } + + //权限验证 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return new SimpleAuthorizationInfo(); + } + + //令牌确认 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + //管理员令牌 + SessionUser sessionUser = systemLoginService.queryCheckE9SaAdminLogin((SaAdminToken) authenticationToken); + LOGGER.info("超级管理员令牌验证:{}", sessionUser); + return new SimpleAuthenticationInfo(sessionUser, ((SaAdminToken) authenticationToken).getLoginName(), this.getName()); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9UserAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9UserAuthRealm.java new file mode 100644 index 0000000..ef5ee1d --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/e9/E9UserAuthRealm.java @@ -0,0 +1,57 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.e9; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +import cn.estsh.i3plus.pojo.base.shirotoken.AdminToken; +import cn.estsh.i3plus.pojo.base.shirotoken.UserToken; +import cn.estsh.i3plus.pojo.platform.bean.SessionUser; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationInfo; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.authc.SimpleAuthenticationInfo; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * @Description : 验证规则 + * @Reference :- + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 14:04 + * @Modify: + **/ +public class E9UserAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(E9UserAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public E9UserAuthRealm() { + //添加支持的token + this.setAuthenticationTokenClass(UserToken.class); + } + + //权限验证 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return new SimpleAuthorizationInfo(); + } + + //令牌确认 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + try { + //管理员令牌 + SessionUser sessionUser = systemLoginService.queryCheckE9UserLogin((UserToken) authenticationToken); + LOGGER.info("用户令牌验证:{}", sessionUser); + return new SimpleAuthenticationInfo(sessionUser, ((UserToken) authenticationToken).getLoginName(), this.getName()); + } catch (Exception e) { + e.printStackTrace(); + throw new AuthenticationException(e.getMessage()); + } + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index a63006a..15df22b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -49,8 +49,10 @@ import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.SpringContextsUtil; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.CredentialsException; import org.apache.shiro.authc.IncorrectCredentialsException; @@ -78,6 +80,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.function.BiFunction; import java.util.stream.Collectors; @@ -193,27 +196,57 @@ public class WhiteController extends CoreBaseController { } } - @GetMapping(value = "/auth/oss-login") + @GetMapping(value = "/auth/{loginStrategy}/sso-login") @ApiOperation(value = "登录", notes = "登录") - public ResultBean ossLogin(HttpServletRequest request, SystemLoginModel loginModel) throws NoSuchFieldException { + public ResultBean ssoLogin(HttpServletRequest request, @PathVariable(name = "loginStrategy") String loginStrategy) throws NoSuchFieldException { + String fieldMapping = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.SSO_REQUEST_MAPPING); + if (StringUtils.isEmpty(fieldMapping)) { + return ResultBean.fail("请在平台数据库中配置表添加字段映射配置"); + } + + SystemLoginModel loginModel = assembleLoginModelByRequest(request, fieldMapping); + loginModel.setLoginStrategy(loginStrategy); + ValidatorBean.beginValid(loginModel) .notNull("loginStrategy", loginModel.getLoginStrategy()) .notNull("loginName", loginModel.getLoginName()); String beanName = ImppEnumUtil.AUTH_LOGIN_STRATEGY.codeOfStrategyName(loginModel.getLoginStrategy()); ISystemLoginStrategyService loginStrategyService = (ISystemLoginStrategyService) SpringContextsUtil.getBean(beanName); - BaseThreadLocal.setData(PlatformConstWords.IS_OSS_LOGIN, true); + BaseThreadLocal.setData(PlatformConstWords.IS_SSO_LOGIN, true); return loginByStrategy(request, loginModel, loginStrategyService.login()); } + private SystemLoginModel assembleLoginModelByRequest(HttpServletRequest request, String fieldMapping) { + JSONObject mappingObject = (JSONObject) JSONObject.parse(fieldMapping); + + SystemLoginModel loginModel = new SystemLoginModel(); + getJsonObjectParameterFromRequest("loginName", request, mappingObject).ifPresent(d -> loginModel.setLoginName(d.toString())); + getJsonObjectParameterFromRequest("loginPwd", request, mappingObject).ifPresent(d -> loginModel.setLoginPwd(d.toString())); + getJsonObjectParameterFromRequest("appId", request, mappingObject).ifPresent(d -> loginModel.setAppId(d.toString())); + getJsonObjectParameterFromRequest("languageCode", request, mappingObject).ifPresent(d -> loginModel.setLanguageCode(d.toString())); + getJsonObjectParameterFromRequest("deviceId", request, mappingObject).ifPresent(d -> loginModel.setDeviceId(d.toString())); + + return loginModel; + } + + private Optional getJsonObjectParameterFromRequest(String key, HttpServletRequest request, JSONObject mappingObject) { + Object data = request.getParameter(mappingObject.get(key) == null ? "" : mappingObject.get(key).toString()); + return Optional.ofNullable(data); + } + @GetMapping(value = "/auth/login") @ApiOperation(value = "登录", notes = "登录") public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, @RequestParam(required = false) String languageCode, @RequestParam(required = false) String deviceId) { - SystemLoginModel loginModel = new SystemLoginModel(loginName, loginPwd, languageCode, deviceId, ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode()); - + SystemLoginModel loginModel = SystemLoginModel.builder() + .loginName(loginName) + .loginPwd(loginPwd) + .languageCode(languageCode) + .deviceId(deviceId) + .loginStrategy(ImppEnumUtil.AUTH_LOGIN_STRATEGY.ACCOUNT.getCode()).build(); String beanName = ImppEnumUtil.AUTH_LOGIN_STRATEGY.codeOfStrategyName(loginModel.getLoginStrategy()); ISystemLoginStrategyService loginStrategyService = (ISystemLoginStrategyService) SpringContextsUtil.getBean(beanName); @@ -230,7 +263,7 @@ public class WhiteController extends CoreBaseController { CommonEnumUtil.USER_LOGIN_STATUS userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.LOGIN_SUCCESS; try { - loginStrategy.apply(request, loginModel); + result = loginStrategy.apply(request, loginModel); } catch (IncorrectCredentialsException e) { result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD); userPasswordUtil.checkLoginErrorNumber(loginModel.getLoginName(), result, e); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java index d23efc8..cf48b78 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -108,6 +108,32 @@ public class SystemLoginService implements ISystemLoginService { } @Override + @ApiOperation(value = "封装用户", notes = "封装普通用户信息") + public SessionUser queryCheckE9UserLogin(UserToken userToken) { + //验证用户 + SysUser user = getUserLoginInfo(userToken.getLoginName()); + LOGGER.info("【验证用户checkUserLogin】{}", user); + //用户单地登录 + return packSessionUser(user, CommonEnumUtil.USER_TYPE.USER.getCode(), userToken.getLanguageCode()); + } + + @Override + @ApiOperation(value = "封装用户", notes = "封装管理员信息") + public SessionUser queryCheckE9AdminLogin(AdminToken adminToken) { + //验证用户 + SysUser user = getUserLoginInfo(adminToken.getLoginName()); + //未抛异常,封装用户 + return packSessionUser(user, CommonEnumUtil.USER_TYPE.ADMIN.getCode(), adminToken.getLanguageCode()); + } + + @Override + @ApiOperation(value = "封装用户", notes = "封装超级管理员信息") + public SessionUser queryCheckE9SaAdminLogin(SaAdminToken saAdminToken) { + SysUser user = getUserLoginInfo(saAdminToken.getLoginName()); + return packSessionUser(user, CommonEnumUtil.USER_TYPE.SA.getCode(), saAdminToken.getLanguageCode()); + } + + @Override @ApiOperation(value = "登录密码错误", notes = "登录密码错误记录错误次数功能") public Integer doLoginPasswordError(String loginName, String sessionId) { SysUser user = sysUserRDao.getByProperty(new String[]{"userLoginName", "isValid"}, @@ -164,17 +190,7 @@ public class SystemLoginService implements ISystemLoginService { * @return */ public SysUser getUserLoginInfo(String loginName, String pwd) { - SysUser user = sysUserRDao.getByProperty( - new String[]{"userLoginName", "isValid"}, - new Object[]{loginName, CommonEnumUtil.IS_VAILD.VAILD.getValue()}); - - if (user == null) { //用户不存在 - throw new CredentialsException("用户不存在"); - } - - if (user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()) { - throw new LockedAccountException("账号已被锁定"); - } + SysUser user = getValidUserByName(loginName); // 登录AD 域检查 if (ImppSwitchUtil.isLoginActiveDirectory()) { @@ -218,6 +234,34 @@ public class SystemLoginService implements ISystemLoginService { throw new IncorrectCredentialsException("登陆密码错误"); } + public SysUser getUserLoginInfo(String loginName) { + SysUser user = getValidUserByName(loginName); + + // 登录AD 域检查 + if (ImppSwitchUtil.isLoginActiveDirectory()) { + userPasswordUtil.checkActiveDirectory(user); + return user; + } + + userPasswordUtil.checkSysUserLogin(user); + return user; + } + + public SysUser getValidUserByName(String loginName) { + SysUser user = sysUserRDao.getByProperty( + new String[]{"userLoginName", "isValid"}, + new Object[]{loginName, CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + + if (user == null) { + throw new CredentialsException("用户不存在"); + } + + if (user.getUserStatus() != CommonEnumUtil.USER_STATUS.ENABLE.getValue()) { + throw new LockedAccountException("账号已被锁定"); + } + return user; + } + /** * 封装用户登陆信息 * diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java index 001b050..7e64130 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java @@ -66,7 +66,7 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService { AuthUtil.logout(); } - SessionUser user = userService.queryUserLogin( + SessionUser user = userService.loginUser( loginModel.getLoginName().trim(), loginModel.getLoginPwd().trim(), loginModel.getLanguageCode(), diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java index bd6d3d9..fd143b5 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java @@ -67,16 +67,16 @@ public class E9LoginStrategy implements ISystemLoginStrategyService { // 设置语言代码 BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); - BaseThreadLocal.setData(PlatformConstWords.AUTH_REALM_CHOOSE, ImppEnumUtil.AUTH_REALM_STRATEGY.PANASONIC.getStrategyName()); + BaseThreadLocal.setData(PlatformConstWords.AUTH_LOGIN_STRATEGY, ImppEnumUtil.AUTH_LOGIN_STRATEGY.E9.getCode()); int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { AuthUtil.logout(); } - SessionUser user = userService.queryUserLogin( + SessionUser user = userService.loginUser( + loginModel.getLoginName().trim(), loginModel.getLoginName().trim(), - loginModel.getLoginPwd() == null ? null : loginModel.getLoginPwd().trim(), loginModel.getLanguageCode(), loginService.getLoginPlatform(request).getValue(), loginModel.getDeviceId() @@ -90,13 +90,13 @@ public class E9LoginStrategy implements ISystemLoginStrategyService { AuthUtil.setOrganize(user.getUser().getOrganize()); - return null; + return result; }; } private boolean validateHost(HttpServletRequest request) { final String delimiter = ","; - String hostsConfig = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.OSS_REQUEST_HOST); + String hostsConfig = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.SSO_REQUEST_HOST); String[] hosts = hostsConfig.split(delimiter); String requestHost = ServletRequestTool.getRequestHost(request); return Arrays.stream(hosts).anyMatch(d -> requestHost.equals(d)); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java index 976701e..3120bca 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysUserService.java @@ -65,15 +65,6 @@ public class SysUserService implements ISysUserService { private SysUserInfoRepository sysUserInfoRDao; @Autowired - private IUserPermissionDao userPermissionDao; - -// @Autowired -// private SysOrganizeRepository organizeRDao; -// -// @Autowired -// private SysRoleRepository sysRoleRDao; - - @Autowired private SysRefUserRoleRepository refUserRoleRDao; @Autowired @@ -83,15 +74,6 @@ public class SysUserService implements ISysUserService { private SysRefUserPositionRepository refUserPositionRDao; @Autowired - private SysFileRepository sysFileRDao; -// -// @Autowired -// private SysDepartmentRepository departmentRDao; -// -// @Autowired -// private SysPositionRepository sysPositionRDao; - - @Autowired private ISysUserInfoService sysUserInfoService; @Autowired @@ -119,42 +101,37 @@ public class SysUserService implements ISysUserService { private ISysMenuService menuService; @Autowired - private ICoreMemTreeService memTreeService; - - @Autowired private ISysFileService fileService; @Autowired private SysUserPasswordUtil passwordUtil; - @Autowired ISysUserPasswordService userPasswordService; - - @Resource(name = CommonConstWords.IMPP_REDIS_RES) - private ImppRedis redisRes; + @Autowired + ISysUserPasswordService userPasswordService; /** * 缓存 */ - @Resource(name= CommonConstWords.IMPP_REDIS_SESSION) + @Resource(name = CommonConstWords.IMPP_REDIS_SESSION) private ImppRedis redisSession; @Override @ApiOperation(value = "用户登录", notes = "用户登录功能实现") @Transactional(propagation = Propagation.REQUIRED) - public SessionUser queryUserLogin(String loginName, String password, String languageCode,Integer loginPlatform,String deviceId) throws AuthenticationException { + public SessionUser loginUser(String loginName, String password, String languageCode, Integer loginPlatform, String deviceId) throws AuthenticationException { LOGGER.debug("平台用户 SYS_USER loginName:{} \t password:{} \t languageCode:{}", loginName, password, languageCode); BaseToken token = getToken(loginName, password, languageCode, loginPlatform); SessionUser sessionUser = AuthUtil.login(token); SysUser user = this.getSysUserByLoginName(loginName); - if(user == null){ + if (user == null) { throw new CredentialsException("用户不存在"); } // 判断会话模式 - checkSessionMode(loginPlatform,user.getId()); + checkSessionMode(loginPlatform, user.getId()); - packSessionUser(sessionUser, user, user.getUserType(),loginPlatform, languageCode,deviceId); + packSessionUser(sessionUser, user, user.getUserType(), loginPlatform, languageCode, deviceId); packConfigSessionUser(sessionUser, user); AuthUtil.setSessionUser(sessionUser); refreshUserLoginInformation(user.getId()); @@ -163,12 +140,12 @@ public class SysUserService implements ISysUserService { return sessionUser; } - private void checkSessionMode(Integer loginPlatform,Long userId){ - int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE,CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); + private void checkSessionMode(Integer loginPlatform, Long userId) { + int sessionMode = RedisCacheTool.getSysConfigIntVal(CommonConstWords.CONFIG_SESSION_MODE, CommonConstWords.CONFIG_SESSION_MODE_DEFAULT); String redisKey; if (sessionMode == CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) { redisKey = CommonConstWords.SESSION_USER + ":*_" + userId; - }else { + } else { return; } @@ -186,15 +163,15 @@ public class SysUserService implements ISysUserService { @Override public BaseToken getToken(String loginName, String password, String languageCode, Integer loginPlatform) { SysUser user = this.getSysUserByLoginName(loginName); - if(user != null){ - if(user.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN.getValue())){ - return new AdminToken(loginName,password,languageCode,loginPlatform); - }else if(user.getUserType().equals(CommonEnumUtil.USER_TYPE.SA.getValue())){ - return new SaAdminToken(loginName,password,languageCode,loginPlatform); - }else { - return new UserToken(loginName,password,languageCode,loginPlatform); + if (user != null) { + if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.ADMIN.getValue())) { + return new AdminToken(loginName, password, languageCode, loginPlatform); + } else if (user.getUserType().equals(CommonEnumUtil.USER_TYPE.SA.getValue())) { + return new SaAdminToken(loginName, password, languageCode, loginPlatform); + } else { + return new UserToken(loginName, password, languageCode, loginPlatform); } - }else { + } else { throw new CredentialsException("用户不存在"); } } @@ -212,7 +189,7 @@ public class SysUserService implements ISysUserService { @Override public void doLockSysUserById(Long id) { SysUser user = userRDao.getById(id); - if(Objects.nonNull(user)){ + if (Objects.nonNull(user)) { user.setUserStatus(CommonEnumUtil.USER_STATUS.LOCKING.getValue()); userRDao.save(user); } @@ -221,15 +198,15 @@ public class SysUserService implements ISysUserService { @Override @ApiOperation(value = "修改账号", notes = "批量修改账号状态") public void updateBatchSysUserStatus(Long[] ids, int status, SessionUser user) { - LOGGER.debug("平台用户 SYS_USER DELETE By ids :{} status:{}, SessionUser :{}", ids,status,user); + LOGGER.debug("平台用户 SYS_USER DELETE By ids :{} status:{}, SessionUser :{}", ids, status, user); String where = CoreHqlPack.packHqlIds("id", ids); List list = userRDao.findByHqlWhere(where); - if(null != list && list.size() > 0){ + if (null != list && list.size() > 0) { for (SysUser sysUser : list) { sysUser.setUserStatus(status); sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - ConvertBean.modelUpdate(sysUser,user); + ConvertBean.modelUpdate(sysUser, user); } userRDao.saveAll(list); } @@ -245,9 +222,9 @@ public class SysUserService implements ISysUserService { @Override @ApiOperation(value = "修改账号", notes = "修改账号登录密码") public void updateSysUserPassword(Long userId, String password, String newPwd) throws Exception { - LOGGER.debug("平台用户 SYS_USER Override:{} password:{} newPwd:{}", userId,password,newPwd); + LOGGER.debug("平台用户 SYS_USER Override:{} password:{} newPwd:{}", userId, password, newPwd); SysUser user = userRDao.getById(userId); - ValidatorBean.checkNotNull(user,"用户不存在"); + ValidatorBean.checkNotNull(user, "用户不存在"); user.setUserLoginPassword(newPwd); passwordUtil.checkPasswordSave(user); @@ -294,7 +271,7 @@ public class SysUserService implements ISysUserService { @Override @ApiOperation(value = "新增账号", notes = "新增账号信息") - public SysUser insertSysUser(SysUser sysUser)throws Exception { + public SysUser insertSysUser(SysUser sysUser) throws Exception { LOGGER.debug("平台用户 SYS_USER SysUser:{}", sysUser); SysUser loginUser = getSysUserByLoginName(sysUser.getUserLoginName()); @@ -314,7 +291,7 @@ public class SysUserService implements ISysUserService { } @Override - @ApiOperation(value = "新增登录日志",notes = "新增登录日志信息") + @ApiOperation(value = "新增登录日志", notes = "新增登录日志信息") public SysLogUserLogin insertSysLogUserLogin(SysLogUserLogin sysLogUserLogin) { LOGGER.debug("平台用户登录记录 SysLogUserLogin sysLogUserLogin:{}", sysLogUserLogin); return logUserLoginRDao.insert(sysLogUserLogin); @@ -332,7 +309,7 @@ public class SysUserService implements ISysUserService { // 删除角色关系信息 refUserRoleRDao.deleteByProperty("userId", sysUser.getId()); // 删除用户角色关系 - if(null != list && list.size() > 0){ + if (null != list && list.size() > 0) { // 新增用户角色关系 List refUserRoles = new ArrayList<>(); List roleNameList = new ArrayList<>(); @@ -380,19 +357,19 @@ public class SysUserService implements ISysUserService { @Override @ApiOperation(value = "删除账号", notes = "批量删除账号信息,逻辑删除,账号关系业务物理删除") - public void deleteBatchSysUserById(Long[] ids,SessionUser user) { + public void deleteBatchSysUserById(Long[] ids, SessionUser user) { LOGGER.debug("平台用户 SYS_USER DELETE By ids :{}", ids); // 标记用户已删除 String where = CoreHqlPack.packHqlIds("id", ids); List list = userRDao.findByHqlWhere(where); - if(null != list && list.size() > 0){ + if (null != list && list.size() > 0) { for (SysUser sysUser : list) { sysUser.setIsValid(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); } userRDao.saveAll(list); - refUserRoleRDao.deleteByPropertyIn("userId",ids); + refUserRoleRDao.deleteByPropertyIn("userId", ids); } } @@ -401,7 +378,7 @@ public class SysUserService implements ISysUserService { public List list() { LOGGER.debug("平台用户 SYS_USER find All"); return userRDao.findByProperty( - new String[]{"isDeleted","isValid"}, + new String[]{"isDeleted", "isValid"}, new Object[]{ CommonEnumUtil.IS_DEAL.NO.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue() @@ -417,7 +394,7 @@ public class SysUserService implements ISysUserService { public List listByUserOrganizeCode() { LOGGER.debug("平台用户 SYS_USER listByUserOrganizeCode"); return userRDao.findByProperty( - new String[]{"isDeleted","isValid","organizeCode"}, + new String[]{"isDeleted", "isValid", "organizeCode"}, new Object[]{ CommonEnumUtil.IS_DEAL.NO.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), @@ -426,14 +403,14 @@ public class SysUserService implements ISysUserService { } @Override - @ApiOperation(value = "查询用户ID 集合",notes = "根据角色Id 查询用户ID集合") + @ApiOperation(value = "查询用户ID 集合", notes = "根据角色Id 查询用户ID集合") public List findSysUserIdListByRoleId(Long roleId) { List result = new ArrayList<>(); - if(roleId != null){ + if (roleId != null) { List list = refUserRoleRDao.findByProperty( - new String[]{"roleId","isValid"}, - new Object[]{roleId,CommonEnumUtil.IS_VAILD.VAILD.getValue()}); - if(list != null && list.size() > 0){ + new String[]{"roleId", "isValid"}, + new Object[]{roleId, CommonEnumUtil.IS_VAILD.VAILD.getValue()}); + if (list != null && list.size() > 0) { for (SysRefUserRole ref : list) { result.add(ref.getUserId()); } @@ -443,14 +420,14 @@ public class SysUserService implements ISysUserService { } @Override - @ApiOperation(value = "查询用户ID 集合",notes = "根据部门Id 查询用户ID集合") + @ApiOperation(value = "查询用户ID 集合", notes = "根据部门Id 查询用户ID集合") public List findSysUserIdListByDepartmentId(List idList) { List result = new ArrayList<>(); - if(idList != null && idList.size() > 0){ + if (idList != null && idList.size() > 0) { StringBuffer hqlWhere = new StringBuffer(); HqlPack.getInPack(StringUtils.join(idList, ","), "departmentId", hqlWhere); List list = refUserDepartmentRDao.findByHqlWhere(hqlWhere.toString()); - if(list != null && list.size() > 0){ + if (list != null && list.size() > 0) { for (SysRefUserDepartment ref : list) { result.add(ref.getUserId()); } @@ -465,20 +442,20 @@ public class SysUserService implements ISysUserService { LOGGER.debug("系统用户 SysUser find user :{} page :{}", user, pager); // 角色查询 - if(user.getRoleId() != null){ + if (user.getRoleId() != null) { List ids = findSysUserIdListByRoleId(user.getRoleId()); user.setRoleIdList(StringTool.getListString(ids)); } List departmentIdList = new ArrayList<>(); - if(user.getOrganizeId() != null){ + if (user.getOrganizeId() != null) { // 查出所有组织 ID 集合 SysOrganize parent = coreTreeService.getSysOrganizeTreeById(user.getOrganizeId()); List childIds = coreTreeService.findSysOrganizeChildIds(parent); // 查询所有部门 ID 集合 - if(childIds != null && childIds.size() > 0){ + if (childIds != null && childIds.size() > 0) { for (Long organizeId : childIds) { List ids = coreTreeService.findSysDepartmentIdByOrganizeId(organizeId); departmentIdList.addAll(ids); @@ -487,7 +464,7 @@ public class SysUserService implements ISysUserService { } // 封装部门 ID 信息 - if(user.getDepartmentId() != null){ + if (user.getDepartmentId() != null) { SysDepartment department = departmentService.get(user.getDepartmentId()); departmentIdList.addAll(coreTreeService.findSysDepartmentChildIds(department)); } @@ -518,7 +495,7 @@ public class SysUserService implements ISysUserService { @Override @ApiOperation(value = "用户查询", notes = "根据ID 查询用户信息") public SysUserInfo getSysUserInfoById(Long id) { - return sysUserInfoRDao.getByProperty("id",id); + return sysUserInfoRDao.getByProperty("id", id); } @Override @@ -547,63 +524,63 @@ public class SysUserService implements ISysUserService { @Override @ApiOperation(value = "账号角色", notes = "根据账号ID查询账号角色关系") public List findSysRefUserRoleByUserId(Long userId) { - return refUserRoleRDao.findByProperty("userId",userId); + return refUserRoleRDao.findByProperty("userId", userId); } @Override @ApiOperation(value = "检查-账号登录名", notes = "判断账号是否存在") public boolean checkSysUserLoginName(String userLoginName, long id) { int count = 0; - if(id > 0){ + if (id > 0) { StringBuffer sw = new StringBuffer(); - HqlPack.getStringEqualPack(userLoginName,"userLoginName",sw); - HqlPack.getNumNOEqualPack(id,"id",sw); + HqlPack.getStringEqualPack(userLoginName, "userLoginName", sw); + HqlPack.getNumNOEqualPack(id, "id", sw); count = userRDao.findByHqlWhereCount(sw.toString()); - }else{ - count = userRDao.findByPropertyCount("userLoginName",userLoginName); + } else { + count = userRDao.findByPropertyCount("userLoginName", userLoginName); } - return count <= 0 ; + return count <= 0; } @Override @ApiOperation(value = "检查-账号邮箱", notes = "判断邮箱是否存在") public boolean checkSysUserEmail(String email, long id) { int count; - if(id > 0){ + if (id > 0) { StringBuffer sw = new StringBuffer(); - HqlPack.getStringEqualPack(email,"userEmail",sw); - HqlPack.getNumNOEqualPack(id,"id",sw); + HqlPack.getStringEqualPack(email, "userEmail", sw); + HqlPack.getNumNOEqualPack(id, "id", sw); count = userRDao.findByHqlWhereCount(sw.toString()); - }else{ - count = userRDao.findByPropertyCount("userEmail",email); + } else { + count = userRDao.findByPropertyCount("userEmail", email); } - return count <= 0 ; + return count <= 0; } @Override @ApiOperation(value = "检查-账号手机", notes = "判断手机是否存在") public boolean checkSysUserPhone(String phone, long id) { int count; - if(id > 0){ + if (id > 0) { StringBuffer sw = new StringBuffer(); - HqlPack.getStringEqualPack(phone,"userPhone",sw); - HqlPack.getNumNOEqualPack(id,"id",sw); + HqlPack.getStringEqualPack(phone, "userPhone", sw); + HqlPack.getNumNOEqualPack(id, "id", sw); count = userRDao.findByHqlWhereCount(sw.toString()); - }else{ - count = userRDao.findByPropertyCount("userPhone",phone); + } else { + count = userRDao.findByPropertyCount("userPhone", phone); } - return count <= 0 ; + return count <= 0; } @Override @ApiOperation(value = "检查-账号唯一", notes = "账号唯一性校验") public void checkSysUserOnly(SysUser user) { - if(user != null){ + if (user != null) { // 登录名唯一教研 - if(!checkSysUserLoginName(user.getUserLoginName(), user.getId() == null ? 0 : user.getId())){ + if (!checkSysUserLoginName(user.getUserLoginName(), user.getId() == null ? 0 : user.getId())) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) @@ -613,7 +590,7 @@ public class SysUserService implements ISysUserService { } // 登录名唯一教研 - if(!checkSysUserEmail(user.getUserEmail(),user.getId() == null ? 0 : user.getId())){ + if (!checkSysUserEmail(user.getUserEmail(), user.getId() == null ? 0 : user.getId())) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) @@ -623,7 +600,7 @@ public class SysUserService implements ISysUserService { } // 登录名唯一教研 - if(!checkSysUserPhone(user.getUserPhone(),user.getId() == null ? 0 : user.getId())){ + if (!checkSysUserPhone(user.getUserPhone(), user.getId() == null ? 0 : user.getId())) { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) .setErrorCode(ImppExceptionEnum.VARIFY_EXCEPTION_DATA_EXIT.getCode()) @@ -650,12 +627,12 @@ public class SysUserService implements ISysUserService { * @return */ @Override - @ApiOperation(value = "封装用户信息",notes = "封装登录完成后的用户信息(角色、权限、部门、组织、岗位)") - public SessionUser packSessionUser(SessionUser sessionUser, SysUser user,Integer userType,Integer loginPlatform, String languageCode, String deviceId) { + @ApiOperation(value = "封装用户信息", notes = "封装登录完成后的用户信息(角色、权限、部门、组织、岗位)") + public SessionUser packSessionUser(SessionUser sessionUser, SysUser user, Integer userType, Integer loginPlatform, String languageCode, String deviceId) { LOGGER.debug("平台用户 SYS_USER user id :{}", user.getId()); SysUserInfo userInfo = sysUserInfoRDao.getById(user.getUserInfoId()); - if(userInfo == null){ + if (userInfo == null) { throw new UnknownAccountException("用户信息不存在"); } @@ -692,27 +669,27 @@ public class SysUserService implements ISysUserService { public SessionUser packPageSessionUser(SessionUser sessionUser, SysUser user) { SysConfig configPageList = RedisCacheTool.getSysConfigByConfigCode(CommonConstWords.CONFIG_PAGE_SIZE_LIST); try { - if(configPageList != null && StringUtils.isNotBlank(configPageList.getConfigValue())){ + if (configPageList != null && StringUtils.isNotBlank(configPageList.getConfigValue())) { String[] split = configPageList.getConfigValue().split(","); int[] ints = Arrays.stream(split).mapToInt(Integer::parseInt).toArray(); sessionUser.setPageSizeArray(Arrays.stream(ints).boxed().toArray(Integer[]::new)); } - }catch (Exception e){ + } catch (Exception e) { } - if(sessionUser.getPageSizeArray() == null){ + if (sessionUser.getPageSizeArray() == null) { sessionUser.setPageSizeArray(CommonConstWords.CONFIG_PAGE_SIZE_LIST_DEFAULT); } SysConfig configPageSize = RedisCacheTool.getSysConfigByConfigCode(CommonConstWords.CONFIG_PAGE_DEFAULT_SIZE); try { - if(configPageSize != null && StringUtils.isNotBlank(configPageSize.getConfigValue())){ + if (configPageSize != null && StringUtils.isNotBlank(configPageSize.getConfigValue())) { sessionUser.setPageDefaultSize(Integer.parseInt(configPageSize.getConfigValue())); } - }catch (Exception ignored){ + } catch (Exception ignored) { } - if(sessionUser.getPageDefaultSize() == null || sessionUser.getPageDefaultSize() <= 0){ + if (sessionUser.getPageDefaultSize() == null || sessionUser.getPageDefaultSize() <= 0) { sessionUser.setPageDefaultSize(CommonConstWords.CONFIG_PAGE_DEFAULT); } @@ -737,50 +714,52 @@ public class SysUserService implements ISysUserService { /** * 账号数据排序 - * 创建时间 角色升序 - * 序号倒叙 + 编号升序 菜单 - * 创建时间 组织升序 - * 创建时间 部门升序 + * 创建时间 角色升序 + * 序号倒叙 + 编号升序 菜单 + * 创建时间 组织升序 + * 创建时间 部门升序 + * * @param user */ - public void packSysUserSort(SysUser user){ - if(user != null){ + public void packSysUserSort(SysUser user) { + if (user != null) { // 创建时间升序 - if(user.getRoleList() != null){ + if (user.getRoleList() != null) { user.getRoleList().sort(Comparator.comparing(SysRole::getCreateDatetime)); } - if(user.getMenuList() != null){ + if (user.getMenuList() != null) { user.getMenuList().sort(Comparator.comparing(SysMenu::getMenuSort).reversed() // 倒序 - .thenComparing(SysMenu::getMenuCode)); //升序 + .thenComparing(SysMenu::getMenuCode)); //升序 } - if(user.getOrganizeList() != null){ + if (user.getOrganizeList() != null) { user.getOrganizeList().sort(Comparator.comparing(SysOrganize::getCreateDatetime)); } - if(user.getDepartmentList() != null){ + if (user.getDepartmentList() != null) { user.getDepartmentList().sort(Comparator.comparing(SysDepartment::getCreateDatetime)); } } } /** - * 用户数据排序 - * 岗位创建时间 升序 - * 部门创建时间 升序 - * 组织创建时间 升序 + * 用户数据排序 + * 岗位创建时间 升序 + * 部门创建时间 升序 + * 组织创建时间 升序 + * * @param info */ - public void packSysUserInfoSort(SysUserInfo info){ - if(info != null){ - if(info.getPositionList() != null){ + public void packSysUserInfoSort(SysUserInfo info) { + if (info != null) { + if (info.getPositionList() != null) { info.getPositionList().sort(Comparator.comparing(SysPosition::getCreateDatetime)); } - if(info.getDepartmentList() != null){ + if (info.getDepartmentList() != null) { info.getDepartmentList().sort(Comparator.comparing(SysDepartment::getCreateDatetime)); } - if(info.getOrganizeList() != null){ + if (info.getOrganizeList() != null) { info.getOrganizeList().sort(Comparator.comparing(SysOrganize::getCreateDatetime)); } } @@ -788,15 +767,16 @@ public class SysUserService implements ISysUserService { /** * 封装用户角色信息 + * * @param user * @return */ - public void packSysUserRole(SysUser user){ + public void packSysUserRole(SysUser user) { SysRefUserRole refUserRole = new SysRefUserRole(); refUserRole.setUserId(user.getId()); List refUserRoleList = refUserRoleRDao.findByHqlWhere(CoreHqlPack.packDdlBeanSysRefUserRole(refUserRole)); - if(Objects.nonNull(refUserRoleList)){ + if (Objects.nonNull(refUserRoleList)) { List idList = new ArrayList<>(); refUserRoleList.forEach(ref -> idList.add(ref.getRoleId())); user.setRoleList(roleService.findByIdList(idList)); @@ -805,14 +785,15 @@ public class SysUserService implements ISysUserService { /** * 封装用户 菜单信息 + * * @param user * @return */ - public void packSysUserMenu(SysUser user){ + public void packSysUserMenu(SysUser user) { List list = new ArrayList<>(); try { LOGGER.info("平台用户 SYS_USER user id :{}", user.getUserInfoId()); - if(user.getRoleList() != null && user.getRoleList().size() > 0){ + if (user.getRoleList() != null && user.getRoleList().size() > 0) { List ids = new ArrayList<>(); Set menuIdList = new HashSet<>(); user.getRoleList().forEach(role -> { @@ -826,17 +807,17 @@ public class SysUserService implements ISysUserService { } }); List menuList = menuService.findByIdList(new ArrayList<>(menuIdList)); - if(CollectionUtils.isNotEmpty(menuList)){ + if (CollectionUtils.isNotEmpty(menuList)) { for (SysMenu menu : menuList) { - if(CommonConstWords.SYSTEM_MENU_ROOT_ID.equals(menu.getParentId())){ + if (CommonConstWords.SYSTEM_MENU_ROOT_ID.equals(menu.getParentId())) { menu.getChildList().clear(); list.add(menu); } } } } - }catch (Exception e){ - LOGGER.error(" SysUser Peck Menu information Error userId : {} Exception Message : {} " ,user.getUserInfoId(),e.getMessage()); + } catch (Exception e) { + LOGGER.error(" SysUser Peck Menu information Error userId : {} Exception Message : {} ", user.getUserInfoId(), e.getMessage()); e.printStackTrace(); } @@ -872,141 +853,150 @@ public class SysUserService implements ISysUserService { /** * 封装用户 部门信息封装 + * * @param userInfo * @return */ - public void packSysUserInfoDepartment(SysUserInfo userInfo){ + public void packSysUserInfoDepartment(SysUserInfo userInfo) { try { LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId()); - personnelService.findSysRefUserInfoDepartmentById(userInfo.id); + personnelService.findSysRefUserInfoDepartmentById(userInfo.id); userInfo.setDepartment(departmentService.get(userInfo.getDepartmentId())); userInfo.setDepartmentList(personnelService.findSysUserInfoDepartmentByInfoId(userInfo.getId())); - }catch (Exception e){ - LOGGER.error(" SysUser Peck Department information Error userId : {} Exception Message : {} " ,userInfo.getId(),e.getMessage()); + } catch (Exception e) { + LOGGER.error(" SysUser Peck Department information Error userId : {} Exception Message : {} ", userInfo.getId(), e.getMessage()); e.printStackTrace(); } } /** * 封装用户 部门信息封装 + * * @param user * @return */ - public void packSysUserDepartment(SysUser user){ + public void packSysUserDepartment(SysUser user) { try { LOGGER.debug("平台用户 SYS_USER user id :{}", user.getId()); user.setDepartment(departmentService.get(user.getDepartmentId())); user.setDepartmentList(personnelService.findSysUserDepartmentByInfoId(user.id)); - }catch (Exception e){ - LOGGER.error(" SysUser Peck Department information Error userId : {} Exception Message : {} " ,user.getId(),e.getMessage()); + } catch (Exception e) { + LOGGER.error(" SysUser Peck Department information Error userId : {} Exception Message : {} ", user.getId(), e.getMessage()); e.printStackTrace(); } } /** - * 封装用户 岗位信息封装 + * 封装用户 岗位信息封装 + * * @param userInfo * @return */ - public void packSysUserInfoPosition(SysUserInfo userInfo){ + public void packSysUserInfoPosition(SysUserInfo userInfo) { try { LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId()); SysRefUserPosition refUserPosition = new SysRefUserPosition(); refUserPosition.setUserId(userInfo.getId()); List refUserPositionList = refUserPositionRDao.findByHqlWhere(CoreHqlPack.packHqlSysRefUserPosition(refUserPosition)); - if(CollectionUtils.isNotEmpty(refUserPositionList)){ + if (CollectionUtils.isNotEmpty(refUserPositionList)) { List idList = new ArrayList<>(); refUserPositionList.forEach(ref -> idList.add(ref.getPositionId())); userInfo.setPositionList(positionService.findByIdList(idList)); } userInfo.setPosition(positionService.get(userInfo.getPositionId())); - }catch (Exception e){ - LOGGER.error(" SysUser Peck Position information Error userId : {} Exception Message : {} " ,userInfo.getId(),e.getMessage()); + } catch (Exception e) { + LOGGER.error(" SysUser Peck Position information Error userId : {} Exception Message : {} ", userInfo.getId(), e.getMessage()); } } /** - * 封装用户 组织信息封装 + * 封装用户 组织信息封装 + * * @param userInfo * @return */ - public void packSysUserInfoOrganize(SysUserInfo userInfo){ + public void packSysUserInfoOrganize(SysUserInfo userInfo) { try { LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId()); userInfo.setOrganize(organizeService.get(userInfo.getOrganizeId())); - userInfo.setOrganizeList(personnelService.findSysUserInfoOrganize(userInfo.getId()));; - }catch (Exception e){ - LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} " ,userInfo.getId(),e.getMessage()); + userInfo.setOrganizeList(personnelService.findSysUserInfoOrganize(userInfo.getId())); + ; + } catch (Exception e) { + LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} ", userInfo.getId(), e.getMessage()); } } /** - * 封装用户 组织信息封装 + * 封装用户 组织信息封装 + * * @param userInfo * @return */ - public void packSysUserInfoImage(SysUserInfo userInfo){ + public void packSysUserInfoImage(SysUserInfo userInfo) { try { LOGGER.debug("平台用户 SYS_USER user id :{}", userInfo.getId()); - if(Objects.nonNull(userInfo.getUserImageId())){ + if (Objects.nonNull(userInfo.getUserImageId())) { SysFile file = fileService.getSysFileById(userInfo.getUserImageId()); - if(Objects.nonNull(file)){ + if (Objects.nonNull(file)) { userInfo.setImageFileUrl(file.getFilePath()); } } - }catch (Exception e){ - LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} " ,userInfo.getId(),e.getMessage()); + } catch (Exception e) { + LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} ", userInfo.getId(), e.getMessage()); } } /** - * 封装用户 组织信息封装 + * 封装用户 组织信息封装 + * * @param user * @return */ - public void packSysUserOrganize(SysUser user){ + public void packSysUserOrganize(SysUser user) { try { LOGGER.debug("平台用户 SYS_USER user id :{}", user.getId()); user.setOrganize(organizeService.get(user.getOrganizeId())); - user.setOrganizeList(personnelService.findSysUserOrganize(user.getId()));; - }catch (Exception e){ - LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} " ,user.getId(),e.getMessage()); + user.setOrganizeList(personnelService.findSysUserOrganize(user.getId())); + ; + } catch (Exception e) { + LOGGER.error(" SysUser Peck Organize information Error userId : {} Exception Message : {} ", user.getId(), e.getMessage()); } } /** * 获取集合中的Root Id + * * @param menus * @return */ - private List getSysMenuRootIds(List menus){ - Map map = new HashMap<>(); + private List getSysMenuRootIds(List menus) { + Map map = new HashMap<>(); List result = new ArrayList<>(); SysMenu parentMenu = null; // 获取所有顶级节点 ParentId 不存在的对象 for (SysMenu menu : menus) { parentMenu = map.get(menu.getParentId()); - if(parentMenu == null){ + if (parentMenu == null) { for (SysMenu sysMenu : menus) { - if(sysMenu.getId().longValue() == menu.getParentId().longValue()){ + if (sysMenu.getId().longValue() == menu.getParentId().longValue()) { parentMenu = sysMenu; } } } - map.put(menu.getParentId(),parentMenu); + map.put(menu.getParentId(), parentMenu); } // 封装返回对象 for (Long parentId : map.keySet()) { - if(map.get(parentId) == null){ + if (map.get(parentId) == null) { for (SysMenu sysMenu : menus) { - if(sysMenu.getParentId().longValue() == parentId.longValue()){ + if (sysMenu.getParentId().longValue() == parentId.longValue()) { result.add(sysMenu); } } diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index fda1e21..c8a09af 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -1,5 +1,5 @@ #\u672C\u673Aip -impp.server.ip=192.168.1.56 +impp.server.ip=192.168.3.97 #\u9879\u76EE\u7AEF\u53E3 server.port=8100 #\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 diff --git a/modules/i3plus-core-apiservice/src/main/resources/application.properties b/modules/i3plus-core-apiservice/src/main/resources/application.properties index 078ac2c..229a7b5 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application.properties @@ -1,5 +1,5 @@ #\u4F7F\u7528\u914D\u7F6E -spring.profiles.active=docker +spring.profiles.active=dev #\u9879\u76EE\u63CF\u8FF0\u4FE1\u606F\uFF08swagger\u4E2D\u663E\u5F0F\uFF09\uFF0C\u4E2D\u6587\u4F7F\u7528uncode\u8F6C\u7801 desc.application.name=\u6838\u5FC3\u7BA1\u7406\u540E\u53F0 diff --git a/pom.xml b/pom.xml index 3db2eed..a6aa64a 100644 --- a/pom.xml +++ b/pom.xml @@ -199,6 +199,13 @@ 12.2.0.1 + + org.springframework.boot + spring-boot-starter-data-elasticsearch + 2.4.2 + + + com.microsoft.sqlserver From 32a14d23d8a06b115e48cb4636d5b700dbf89d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Tue, 19 Jan 2021 17:09:03 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix(core):poi=E7=89=88=E6=9C=AC=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/pom.xml b/pom.xml index 3db2eed..1388072 100644 --- a/pom.xml +++ b/pom.xml @@ -282,17 +282,6 @@ mail 1.4.7 - - - org.apache.poi - poi - RELEASE - - - org.apache.poi - poi-ooxml - RELEASE - org.jdom From 8d4f36ebef49901bef919164b40720b2b6fd51d8 Mon Sep 17 00:00:00 2001 From: wynne1005 Date: Fri, 22 Jan 2021 10:31:58 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=9D=BE=E4=B8=8BE9?= =?UTF-8?q?=E6=96=B9=E5=BC=8F=E4=BD=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java | 4 ++++ .../apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java index cf48b78..af43f3a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemLoginService.java @@ -72,6 +72,10 @@ public class SystemLoginService implements ISystemLoginService { return AuthUtil.login(ut); } + public static void main(String[] args) { + System.out.println(1+2+"a"); + } + @Override @ApiOperation(value = "用户登录", notes = "管理用户登录") public SessionUser queryAdminLogin(String loginName, String loginPwd, String languageCode) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java index fd143b5..b7c9091 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java @@ -16,8 +16,8 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.RedisCacheTool; import cn.estsh.impp.framework.boot.util.ResultBean; -import cn.estsh.impp.framework.boot.util.ValidatorBean; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -59,9 +59,9 @@ public class E9LoginStrategy implements ISystemLoginStrategyService { return ResultBean.fail("单点登录请求未从指定授权服务器发送,校验失败。"); } licenseClickService.checkLicenseNumberLogin(); - ValidatorBean.checkNotNull(loginModel.getLanguageCode(), "语言不能为空"); + // TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息 - if ("null".equals(loginModel.getLanguageCode())) { + if ("null".equals(loginModel.getLanguageCode())|| StringUtils.isEmpty(loginModel.getLanguageCode())) { loginModel.setLanguageCode(DEFAULT_LANGUAGE); } From 54ea5129c51694c0b19b3424c00b51ab050f364e Mon Sep 17 00:00:00 2001 From: wynne1005 Date: Fri, 22 Jan 2021 10:38:55 +0800 Subject: [PATCH 5/7] merge --- modules/i3plus-core-apiservice/pom.xml | 9 --------- .../src/main/resources/application-dev.properties | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index c6dc67d..3684557 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -212,15 +212,6 @@ - org.apache.poi - poi - - - org.apache.poi - poi-ooxml - - - org.elasticsearch elasticsearch 7.5.1 diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index c8a09af..fda1e21 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -1,5 +1,5 @@ #\u672C\u673Aip -impp.server.ip=192.168.3.97 +impp.server.ip=192.168.1.56 #\u9879\u76EE\u7AEF\u53E3 server.port=8100 #\u94FE\u8DEF\u8FFD\u8E2Azipkin\u63A7\u5236\u53F0ip\u5730\u5740 From af17e1f46945e0af1b87e7d171833f72dcab6da1 Mon Sep 17 00:00:00 2001 From: wynne1005 Date: Mon, 1 Mar 2021 10:09:25 +0800 Subject: [PATCH 6/7] =?UTF-8?q?feat(form):=20=E5=8A=A8=E6=80=81=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E6=96=B0=E5=A2=9E=E8=B7=B3=E8=BD=AC=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/api/iservice/base/ISysLogService.java | 10 +- .../iservice/base/ISystemLoginStrategyService.java | 4 +- .../core/apiservice/controller/DemoController.java | 1 + .../controller/base/SysLogController.java | 91 +++++++++++++++ .../controller/base/WhiteController.java | 35 +++--- .../controller/busi/SysEnumController.java | 21 +++- .../base/SysLogElasticSearchService.java | 125 +++++++++++++-------- .../apiservice/serviceimpl/base/SysLogFactory.java | 47 +++++--- .../serviceimpl/base/SysLogMongoService.java | 41 ++++--- .../base/login/strategy/DefaultLoginStrategy.java | 4 +- .../base/login/strategy/E9LoginStrategy.java | 4 +- .../src/main/resources/application-dev.properties | 2 + .../src/main/resources/log4j2-spring-dev.xml | 2 +- .../src/main/resources/log4j2-spring.xml | 4 +- 14 files changed, 287 insertions(+), 104 deletions(-) create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SysLogController.java diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISysLogService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISysLogService.java index 0cca652..0866d9c 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISysLogService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISysLogService.java @@ -2,7 +2,13 @@ package cn.estsh.i3plus.core.api.iservice.base; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; -import cn.estsh.i3plus.pojo.platform.platbean.*; +import cn.estsh.i3plus.pojo.model.platform.LogFieldModel; +import cn.estsh.i3plus.pojo.model.platform.SysLogModel; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogException; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -60,4 +66,6 @@ public interface ISysLogService { @ApiOperation(value = "查询时间段内各等级日志数量",notes = "查询时间段内各等级日志数量") Map querySysLogSystemByLevel(String startTime, String endTime); + + List querySysLog(SysLogModel logModel,Pager pager); } diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java index ae44d9b..3af9165 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/base/ISystemLoginStrategyService.java @@ -1,6 +1,6 @@ package cn.estsh.i3plus.core.api.iservice.base; -import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; +import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.impp.framework.boot.util.ResultBean; import javax.servlet.http.HttpServletRequest; @@ -17,5 +17,5 @@ public interface ISystemLoginStrategyService { * @param loginModel * @return */ - BiFunction login(); + BiFunction login(); } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoController.java index afb25be..3554460 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/DemoController.java @@ -47,6 +47,7 @@ public class DemoController extends CoreBaseController { @ApiOperation(value = "添加操作日志", notes = "添加操作日志,可用于国际化") public ResultBean putRedisList(boolean isUpdate) { try { + int x= 1/0; // pojoVersionPlanService.refreshCache(isUpdate); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SysLogController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SysLogController.java new file mode 100644 index 0000000..fb1d1d9 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/SysLogController.java @@ -0,0 +1,91 @@ +package cn.estsh.i3plus.core.apiservice.controller.base; + +import cn.estsh.i3plus.core.api.iservice.base.ISysLogService; +import cn.estsh.i3plus.platform.plugin.elasticsearch.ElasticSearchTool; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.model.platform.LogFieldModel; +import cn.estsh.i3plus.pojo.model.platform.SysLogModel; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSON; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.elasticsearch.search.aggregations.AggregationBuilders; +import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder; +import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author Wynne.Lu + * @date 2021/2/20 上午10:49 + * @desc + */ +@Slf4j +@Api(tags = "系统日志查询服务") +@RestController +@RequestMapping("/log") +public class SysLogController { + + @Autowired + private ISysLogService sysLogService; + + @Value(value = "${elasticsearch.host:}") + private String elasticsearchHost; + + @GetMapping("/log-query") + @ApiOperation(value = "按条件分页查询日志", notes = "按条件分页查询日志") + public ResultBean queryLogs(SysLogModel sysLogModel, Pager pager) { + try { + ValidatorBean.beginValid(sysLogModel) + .notNull("queryDate", sysLogModel.getQueryDate()) + .notNull("queryBeginTime", sysLogModel.getQueryBeginTime()) + .notNull("queryEndTime", sysLogModel.getQueryEndTime()) + .notNull("level", sysLogModel.getLevel()) + .notNull("indexName", sysLogModel.getIndexName()); + + List list = sysLogService.querySysLog(sysLogModel, pager); + sysLogModel.setLogs(list); + + return ResultBean.success(JSON.toJSONString(sysLogModel)); + } catch (NoSuchFieldException e) { + log.error("字段缺省 发生异常:", e); + return ResultBean.fail(e.getMessage()); + } catch (Exception e) { + log.error("搜索日志 发生异常:", e); + return ResultBean.fail(e.getMessage()); + } + } + + @GetMapping("/log-count-query") + @ApiOperation(value = "按条件分页查询日志", notes = "按条件分页查询日志") + public ResultBean queryLogsCount(SysLogModel sysLogModel, Pager pager) { + DateHistogramAggregationBuilder dateHistogramAgg = AggregationBuilders.dateHistogram("groupDate").field("@timestamp") + .calendarInterval(DateHistogramInterval.DAY).minDocCount(1); + + return null; + } + + @GetMapping("/indices-query") + @ApiOperation(value = "所有索引查询", notes = "所有索引查询") + public ResultBean queryIndices(String date) { + if (StringUtils.isEmpty(elasticsearchHost)) { + return ResultBean.fail("未在配置文件中配置Elasticsearch的地址"); + } + + ElasticSearchTool.init(elasticsearchHost); + + List indices = ElasticSearchTool.findMappingMetaData().keySet() + .stream().filter(d -> d.contains(date)).collect(Collectors.toList()); + + return ResultBean.success(JSON.toJSONString(indices)); + } +} diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index 15df22b..605160e 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -25,18 +25,10 @@ import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.model.common.CloudPagerModel; import cn.estsh.i3plus.pojo.model.license.ImppLicense; -import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; +import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.model.platform.UserDetailModel; import cn.estsh.i3plus.pojo.model.platform.UserDetailPagerModel; -import cn.estsh.i3plus.pojo.platform.bean.SysDictionary; -import cn.estsh.i3plus.pojo.platform.bean.SysFile; -import cn.estsh.i3plus.pojo.platform.bean.SysLabelTemplate; -import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; -import cn.estsh.i3plus.pojo.platform.bean.SysLogUserLogin; -import cn.estsh.i3plus.pojo.platform.bean.SysOrderNoRule; -import cn.estsh.i3plus.pojo.platform.bean.SysOrganize; -import cn.estsh.i3plus.pojo.platform.bean.SysUser; -import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo; +import cn.estsh.i3plus.pojo.platform.bean.*; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -181,6 +173,19 @@ public class WhiteController extends CoreBaseController { } } + @GetMapping(value = "/session-user") + @ApiOperation(value = "获取用户信息", notes = "获取当前登录用户账号详细信息") + public ResultBean getSession() { + LOGGER.info("获取用户信息...lang:{}", AuthUtil.getSessionAttribute("languageCode")); + try { + SessionUser sUser = AuthUtil.getSessionUser(); + LOGGER.info("用户:{}", sUser); + return new ResultBean(true, "", sUser); + } catch (ImppBusiException e) { + return new ResultBean(false, e.getErrorDetail() + "-[解决]" + e.getErrorSolution()); + } + } + /** * @return */ @@ -204,7 +209,7 @@ public class WhiteController extends CoreBaseController { return ResultBean.fail("请在平台数据库中配置表添加字段映射配置"); } - SystemLoginModel loginModel = assembleLoginModelByRequest(request, fieldMapping); + SysLoginModel loginModel = assembleLoginModelByRequest(request, fieldMapping); loginModel.setLoginStrategy(loginStrategy); ValidatorBean.beginValid(loginModel) @@ -218,10 +223,10 @@ public class WhiteController extends CoreBaseController { return loginByStrategy(request, loginModel, loginStrategyService.login()); } - private SystemLoginModel assembleLoginModelByRequest(HttpServletRequest request, String fieldMapping) { + private SysLoginModel assembleLoginModelByRequest(HttpServletRequest request, String fieldMapping) { JSONObject mappingObject = (JSONObject) JSONObject.parse(fieldMapping); - SystemLoginModel loginModel = new SystemLoginModel(); + SysLoginModel loginModel = new SysLoginModel(); getJsonObjectParameterFromRequest("loginName", request, mappingObject).ifPresent(d -> loginModel.setLoginName(d.toString())); getJsonObjectParameterFromRequest("loginPwd", request, mappingObject).ifPresent(d -> loginModel.setLoginPwd(d.toString())); getJsonObjectParameterFromRequest("appId", request, mappingObject).ifPresent(d -> loginModel.setAppId(d.toString())); @@ -241,7 +246,7 @@ public class WhiteController extends CoreBaseController { public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, @RequestParam(required = false) String languageCode, @RequestParam(required = false) String deviceId) { - SystemLoginModel loginModel = SystemLoginModel.builder() + SysLoginModel loginModel = SysLoginModel.builder() .loginName(loginName) .loginPwd(loginPwd) .languageCode(languageCode) @@ -254,7 +259,7 @@ public class WhiteController extends CoreBaseController { } - private ResultBean loginByStrategy(HttpServletRequest request, SystemLoginModel loginModel, BiFunction loginStrategy) { + private ResultBean loginByStrategy(HttpServletRequest request, SysLoginModel loginModel, BiFunction loginStrategy) { long startTime = System.currentTimeMillis(); licenseClickService.checkLicenseNumberLogin(); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java index 1fa2d76..648ce09 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -63,7 +63,7 @@ public class SysEnumController extends CoreBaseController { List enumList = new ArrayList(); enumList.add(CommonEnumUtil.DATA_STATUS.ENABLE); enumList.add(CommonEnumUtil.DATA_STATUS.DISABLE); - return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValueList(enumList)); + return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValueList(enumList)); } /** @@ -127,6 +127,18 @@ public class SysEnumController extends CoreBaseController { } /** + * 日志类型 + * + * @return 处理结果 + */ + @GetMapping("/log-type") + @ApiOperation(value = "日志等级", notes = "日志等级") + public ResultBean getLogType() { + return new ResultBean(true, "操作成功", + LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.LOG_TYPE.values())); + } + + /** * 软件类型 * * @return 处理结果 @@ -268,7 +280,6 @@ public class SysEnumController extends CoreBaseController { } - /** * @return 处理结果 */ @@ -288,11 +299,12 @@ public class SysEnumController extends CoreBaseController { List list = new ArrayList<>(); list.add(ImppEnumUtil.MESSAGE_TYPE.MAIL); list.add(ImppEnumUtil.MESSAGE_TYPE.LETTER); - return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValueList(list)); + return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValueList(list)); } /** * 外部通知方式 + * * @return 处理结果 */ @GetMapping("/external-notice-method") @@ -300,11 +312,12 @@ public class SysEnumController extends CoreBaseController { public ResultBean getExternalNoticeMethod() { List list = new ArrayList<>(); list.add(ImppEnumUtil.MESSAGE_TYPE.MAIL); - return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValueList(list)); + return new ResultBean(true, "操作成功", LocaleUtils.getEnumLocaleResValueList(list)); } /** * 字典分组 + * * @return 处理结果 */ @GetMapping("/dictionary-group") diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogElasticSearchService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogElasticSearchService.java index 1063555..ec7ac04 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogElasticSearchService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogElasticSearchService.java @@ -9,7 +9,13 @@ import cn.estsh.i3plus.platform.plugin.elasticsearch.ElasticSearchTool; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; -import cn.estsh.i3plus.pojo.platform.platbean.*; +import cn.estsh.i3plus.pojo.model.platform.LogFieldModel; +import cn.estsh.i3plus.pojo.model.platform.SysLogModel; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogException; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime; import cn.estsh.impp.framework.boot.log.ImppLog; import org.elasticsearch.search.aggregations.Aggregation; import org.elasticsearch.search.aggregations.bucket.terms.ParsedTerms; @@ -18,7 +24,9 @@ import org.elasticsearch.search.aggregations.metrics.ParsedAvg; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.util.LinkedHashMap; import java.util.List; @@ -40,19 +48,22 @@ public class SysLogElasticSearchService implements ISysLogService { @Autowired private ImppLog imppLog; + @Value(value = "${elasticsearch.host:}") + private String elasticsearchHost; + @Override public ListPager queryLogExceptionPager(SysLogException log, Pager pager) { - return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogException(log),pager,SysLogException.class); + return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogException(log), pager, SysLogException.class); } @Override public List findLogExceptionList(SysLogException log, Pager pager) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogException(log),pager,SysLogException.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogException(log), pager, SysLogException.class); } @Override public List findLogExceptionList(SysLogException log) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogException(log),SysLogException.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogException(log), SysLogException.class); } @Override @@ -63,7 +74,7 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public SysLogException getLogException(SysLogException log) { - return ElasticSearchTool.getPrimaryKey(log.getId(),SysLogException.class); + return ElasticSearchTool.getPrimaryKey(log.getId(), SysLogException.class); } @Override @@ -73,17 +84,17 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public ListPager queryLogOperatePager(SysLogOperate log, Pager pager) { - return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogOperate(log),pager,SysLogOperate.class); + return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogOperate(log), pager, SysLogOperate.class); } @Override public List findLogOperateList(SysLogOperate log, Pager pager) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogOperate(log),pager,SysLogOperate.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogOperate(log), pager, SysLogOperate.class); } @Override public List findLogOperateList(SysLogOperate log) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogOperate(log),SysLogOperate.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogOperate(log), SysLogOperate.class); } @Override @@ -94,7 +105,7 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public SysLogOperate getLogOperate(SysLogOperate log) { - return ElasticSearchTool.getPrimaryKey(log.getId(),SysLogOperate.class); + return ElasticSearchTool.getPrimaryKey(log.getId(), SysLogOperate.class); } @Override @@ -104,12 +115,12 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public ListPager queryLogSystemPager(SysLogSystem log, Pager pager) { - return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogSystem(log),pager,SysLogSystem.class); + return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogSystem(log), pager, SysLogSystem.class); } @Override public List findLogSystemList(SysLogSystem log, Pager pager) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogSystem(log),pager,SysLogSystem.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogSystem(log), pager, SysLogSystem.class); } @Override @@ -125,7 +136,7 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public SysLogSystem getLogSystem(SysLogSystem log) { - return ElasticSearchTool.getPrimaryKey(log.getId(),SysLogSystem.class); + return ElasticSearchTool.getPrimaryKey(log.getId(), SysLogSystem.class); } @Override @@ -135,17 +146,17 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public ListPager queryLogTaskTimePager(SysLogTaskTime log, Pager pager) { - return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogTaskTime(log),pager,SysLogTaskTime.class); + return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogTaskTime(log), pager, SysLogTaskTime.class); } @Override public List findLogTaskTimeList(SysLogTaskTime log, Pager pager) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogTaskTime(log),pager,SysLogTaskTime.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogTaskTime(log), pager, SysLogTaskTime.class); } @Override public List findLogTaskTimeList(SysLogTaskTime log) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogTaskTime(log),SysLogTaskTime.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogTaskTime(log), SysLogTaskTime.class); } @Override @@ -156,12 +167,12 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public SysLogTaskTime getLogTaskTime(SysLogTaskTime log) { - return ElasticSearchTool.getPrimaryKey(log.getId(),SysLogTaskTime.class); + return ElasticSearchTool.getPrimaryKey(log.getId(), SysLogTaskTime.class); } @Override public void deleteLogTaskTime(SysLogTaskTime log) { - ElasticSearchTool.deleteQuery(NoSqlPack.packEsSysLogTaskTime(log)); + ElasticSearchTool.deleteQuery(NoSqlPack.packEsSysLogTaskTime(log)); } /******************************************************* 定时任务日志 End *********************************************************/ @@ -170,29 +181,29 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public ListPager queryLogConsolePager(SysLogConsole log, Pager pager) { - return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogConsole(log),pager,SysLogConsole.class); + return ElasticSearchTool.searchPager(NoSqlPack.packEsSysLogConsole(log), pager, SysLogConsole.class); } @Override public List findLogConsoleList(SysLogConsole log, Pager pager) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogConsole(log),pager,SysLogConsole.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogConsole(log), pager, SysLogConsole.class); } @Override public List findLogConsoleList(SysLogConsole log) { - return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogConsole(log),SysLogConsole.class); + return ElasticSearchTool.searchList(NoSqlPack.packEsSysLogConsole(log), SysLogConsole.class); } @Override public SysLogConsole insertLogConsoleTime(SysLogConsole log) { ElasticSearchPack pack = ElasticSearchPack.imppBuild(TimeTool.parseDate(log.getCreateDatetime()), SysLogConsole.class); - ElasticSearchTool.insert(pack.getIndexName(),log); + ElasticSearchTool.insert(pack.getIndexName(), log); return log; } @Override public SysLogConsole getLogConsoleTime(SysLogConsole log) { - return ElasticSearchTool.getPrimaryKey(log.getId(),SysLogConsole.class); + return ElasticSearchTool.getPrimaryKey(log.getId(), SysLogConsole.class); } @Override @@ -206,24 +217,24 @@ public class SysLogElasticSearchService implements ISysLogService { @Override public void actionCleanLog(String startTime, String endTime) { try { - ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogSystem.class),startTime,endTime); - }catch (Exception e){ - LOGGER.error("清除系统日志异常",e); + ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogSystem.class), startTime, endTime); + } catch (Exception e) { + LOGGER.error("清除系统日志异常", e); } try { - ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogOperate.class),startTime,endTime); - }catch (Exception e){ - LOGGER.error("清除系统操作日志异常",e); + ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogOperate.class), startTime, endTime); + } catch (Exception e) { + LOGGER.error("清除系统操作日志异常", e); } try { - ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogException.class),startTime,endTime); - }catch (Exception e){ - LOGGER.error("清除系统异常日志异常",e); + ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogException.class), startTime, endTime); + } catch (Exception e) { + LOGGER.error("清除系统异常日志异常", e); } try { - ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogTaskTime.class),startTime,endTime); - }catch (Exception e){ - LOGGER.error("清除定时任务日志异常",e); + ElasticSearchTool.deleteIndex(ElasticSearchPack.getIndexName(SysLogTaskTime.class), startTime, endTime); + } catch (Exception e) { + LOGGER.error("清除定时任务日志异常", e); } } @@ -232,18 +243,18 @@ public class SysLogElasticSearchService implements ISysLogService { Map resultData = new LinkedHashMap(); ElasticSearchPack pack = ElasticSearchPack.imppBuild(SysLogSystem.class); pack.pager(CommonConstWords.getDefaultPager()); - pack.andStringDateTimeBetween("createDatetime",startTime,endTime); + pack.andStringDateTimeBetween("createDatetime", startTime, endTime); pack.group("createDatetime").avg("executeTime").buildAggregation(); Map aggregationMap = ElasticSearchTool.searchAggregationMap(pack); - ParsedTerms parsedTerms = (ParsedTerms)aggregationMap.get("group_createDatetime"); - if(Objects.nonNull(parsedTerms)){ + ParsedTerms parsedTerms = (ParsedTerms) aggregationMap.get("group_createDatetime"); + if (Objects.nonNull(parsedTerms)) { for (Terms.Bucket bucket : parsedTerms.getBuckets()) { try { String key = bucket.getKeyAsString(); Double value = ((ParsedAvg) bucket.getAggregations().get("avg_executeTime")).getValue(); - resultData.put(key,value.intValue()); - }catch (Exception e){ + resultData.put(key, value.intValue()); + } catch (Exception e) { } } } @@ -256,18 +267,18 @@ public class SysLogElasticSearchService implements ISysLogService { Map resultData = new LinkedHashMap(); ElasticSearchPack pack = ElasticSearchPack.imppBuild(SysLogSystem.class); pack.pager(CommonConstWords.getDefaultPager()); - pack.andStringDateTimeBetween("createDatetime",startTime,endTime); + pack.andStringDateTimeBetween("createDatetime", startTime, endTime); pack.group("logLevel").count("id").buildAggregation(); Map aggregationMap = ElasticSearchTool.searchAggregationMap(pack); - ParsedTerms parsedTerms = (ParsedTerms)aggregationMap.get("group_logLevel"); - if(Objects.nonNull(parsedTerms)){ + ParsedTerms parsedTerms = (ParsedTerms) aggregationMap.get("group_logLevel"); + if (Objects.nonNull(parsedTerms)) { for (Terms.Bucket bucket : parsedTerms.getBuckets()) { try { String key = bucket.getKeyAsString(); - resultData.put(ImppEnumUtil.LOG_LEVEL.valueOfName(Integer.parseInt(key)),bucket.getDocCount()); - }catch (Exception e){ + resultData.put(ImppEnumUtil.LOG_LEVEL.valueOfName(Integer.parseInt(key)), bucket.getDocCount()); + } catch (Exception e) { } } } @@ -275,6 +286,32 @@ public class SysLogElasticSearchService implements ISysLogService { return resultData; } + @Override + public List querySysLog(SysLogModel sysLogModel, Pager pager) { + final String time = "time"; + ElasticSearchTool.init(elasticsearchHost); + ElasticSearchPack pack = new ElasticSearchPack(sysLogModel.getIndexName()); + + pack.andKeywordEquals("level", sysLogModel.getLevel()); + if (!StringUtils.isEmpty(sysLogModel.getHostId())) { + pack.andKeywordEquals("hostId", sysLogModel.getHostId()); + } + if (!StringUtils.isEmpty(sysLogModel.getIndexType())) { + pack.andKeywordEquals("indexType", sysLogModel.getIndexType()); + } + if (!StringUtils.isEmpty(sysLogModel.getThread())) { + pack.andKeywordEquals("thread", sysLogModel.getThread()); + } + pack.andKeywordDateTimeBetween(time, + sysLogModel.getQueryDate().trim() + " " + sysLogModel.getQueryBeginTime(), + sysLogModel.getQueryDate().trim() + " " + sysLogModel.getQueryEndTime()); + + pack.orderKeywordDesc(time); + ListPager listPager = ElasticSearchTool.searchPager(pack, pager, LogFieldModel.class); + + return listPager.getObjectList(); + } + /******************************************************* 系统异常日志 End *********************************************************/ diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogFactory.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogFactory.java index 8600b42..c4f8763 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogFactory.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogFactory.java @@ -6,7 +6,13 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; -import cn.estsh.i3plus.pojo.platform.platbean.*; +import cn.estsh.i3plus.pojo.model.platform.LogFieldModel; +import cn.estsh.i3plus.pojo.model.platform.SysLogModel; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogException; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.log.ImppLog; import cn.estsh.impp.framework.boot.util.ImppSwitchUtil; @@ -41,7 +47,7 @@ public class SysLogFactory implements ISysLogService { @Autowired private ImppLog imppLog; - private ISysLogService getSysLogService(){ + private ISysLogService getSysLogService() { ImppEnumUtil.LOG_STORAGE storage = imppLog.getLogStorageCase(); // if(ImppEnumUtil.LOG_STORAGE.MONGO.equals(storage)){ @@ -56,10 +62,10 @@ public class SysLogFactory implements ISysLogService { // .build(); // } // }else - if(ImppEnumUtil.LOG_STORAGE.ELASTICSEARCH.equals(storage)){ - if(ImppSwitchUtil.isElasticSearchSwitch() && elasticSearchService != null){ + if (ImppEnumUtil.LOG_STORAGE.ELASTICSEARCH.equals(storage)) { + if (ImppSwitchUtil.isElasticSearchSwitch() && elasticSearchService != null) { return elasticSearchService; - }else{ + } else { throw ImppExceptionBuilder.newInstance() .setSystemID(CommonEnumUtil.SOFT_TYPE.IMPP.getCode()) .setErrorCode(ImppExceptionEnum.LOG_SAVE_STORAGE_ERROR.getCode()) @@ -79,12 +85,12 @@ public class SysLogFactory implements ISysLogService { @Override public ListPager queryLogExceptionPager(SysLogException log, Pager pager) { - return getSysLogService().queryLogExceptionPager(log,pager); + return getSysLogService().queryLogExceptionPager(log, pager); } @Override public List findLogExceptionList(SysLogException log, Pager pager) { - return getSysLogService().findLogExceptionList(log,pager); + return getSysLogService().findLogExceptionList(log, pager); } @Override @@ -109,12 +115,12 @@ public class SysLogFactory implements ISysLogService { @Override public ListPager queryLogOperatePager(SysLogOperate log, Pager pager) { - return getSysLogService().queryLogOperatePager(log,pager); + return getSysLogService().queryLogOperatePager(log, pager); } @Override public List findLogOperateList(SysLogOperate log, Pager pager) { - return getSysLogService().findLogOperateList(log,pager); + return getSysLogService().findLogOperateList(log, pager); } @Override @@ -134,17 +140,17 @@ public class SysLogFactory implements ISysLogService { @Override public void deleteLogOperate(SysLogOperate log) { - getSysLogService().deleteLogOperate(log); + getSysLogService().deleteLogOperate(log); } @Override public ListPager queryLogSystemPager(SysLogSystem log, Pager pager) { - return getSysLogService().queryLogSystemPager(log,pager); + return getSysLogService().queryLogSystemPager(log, pager); } @Override public List findLogSystemList(SysLogSystem log, Pager pager) { - return getSysLogService().findLogSystemList(log,pager); + return getSysLogService().findLogSystemList(log, pager); } @Override @@ -169,12 +175,12 @@ public class SysLogFactory implements ISysLogService { @Override public ListPager queryLogTaskTimePager(SysLogTaskTime log, Pager pager) { - return getSysLogService().queryLogTaskTimePager(log,pager); + return getSysLogService().queryLogTaskTimePager(log, pager); } @Override public List findLogTaskTimeList(SysLogTaskTime log, Pager pager) { - return getSysLogService().findLogTaskTimeList(log,pager); + return getSysLogService().findLogTaskTimeList(log, pager); } @Override @@ -194,18 +200,18 @@ public class SysLogFactory implements ISysLogService { @Override public void deleteLogTaskTime(SysLogTaskTime log) { - getSysLogService().deleteLogTaskTime(log); + getSysLogService().deleteLogTaskTime(log); } @Override public ListPager queryLogConsolePager(SysLogConsole log, Pager pager) { - return getSysLogService().queryLogConsolePager(log,pager); + return getSysLogService().queryLogConsolePager(log, pager); } @Override public List findLogConsoleList(SysLogConsole log, Pager pager) { - return getSysLogService().findLogConsoleList(log,pager); + return getSysLogService().findLogConsoleList(log, pager); } @Override @@ -233,7 +239,7 @@ public class SysLogFactory implements ISysLogService { @Override public void actionCleanLog(String startTime, String endTime) { - getSysLogService().actionCleanLog(startTime,endTime); + getSysLogService().actionCleanLog(startTime, endTime); } @Override @@ -246,6 +252,11 @@ public class SysLogFactory implements ISysLogService { return getSysLogService().querySysLogSystemByLevel(startTime, endTime); } + @Override + public List querySysLog(SysLogModel logModel, Pager pager) { + return getSysLogService().querySysLog(logModel, pager); + } + /******************************************************* 系统异常日志 End *********************************************************/ diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogMongoService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogMongoService.java index 23adf3d..9cf1e94 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogMongoService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SysLogMongoService.java @@ -11,7 +11,13 @@ import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; -import cn.estsh.i3plus.pojo.platform.platbean.*; +import cn.estsh.i3plus.pojo.model.platform.LogFieldModel; +import cn.estsh.i3plus.pojo.model.platform.SysLogModel; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogConsole; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogException; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogOperate; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogSystem; +import cn.estsh.i3plus.pojo.platform.platbean.SysLogTaskTime; import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogExceptionRepository; import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogOperateRepository; import cn.estsh.i3plus.pojo.platform.platrepositorymongo.SysLogSystemRepository; @@ -56,7 +62,7 @@ public class SysLogMongoService implements ISysLogService { if (logTaskTimeRDao == null && ImppSwitchUtil.isSwitchMongo()) { try { logTaskTimeRDao = SpringContextsUtil.getBean(SysLogTaskTimeRepository.class); - }catch (Exception e){ + } catch (Exception e) { } } @@ -76,7 +82,7 @@ public class SysLogMongoService implements ISysLogService { if (logSystemRDao == null && ImppSwitchUtil.isSwitchMongo()) { try { logSystemRDao = SpringContextsUtil.getBean(SysLogSystemRepository.class); - }catch (Exception e){ + } catch (Exception e) { } } @@ -96,7 +102,7 @@ public class SysLogMongoService implements ISysLogService { if (logOperateRDao == null && ImppSwitchUtil.isSwitchMongo()) { try { logOperateRDao = SpringContextsUtil.getBean(SysLogOperateRepository.class); - }catch (Exception e){ + } catch (Exception e) { } } @@ -116,7 +122,7 @@ public class SysLogMongoService implements ISysLogService { if (logExceptionRDao == null && ImppSwitchUtil.isSwitchMongo()) { try { logExceptionRDao = SpringContextsUtil.getBean(SysLogExceptionRepository.class); - }catch (Exception e){ + } catch (Exception e) { } } @@ -136,7 +142,7 @@ public class SysLogMongoService implements ISysLogService { if (mongoDbFactory == null && ImppSwitchUtil.isSwitchMongo()) { try { mongoDbFactory = SpringContextsUtil.getBean(MongoDbFactory.class); - }catch (Exception e){ + } catch (Exception e) { } } @@ -153,7 +159,6 @@ public class SysLogMongoService implements ISysLogService { } - @Override public ListPager queryLogExceptionPager(SysLogException log, Pager pager) { Bson bson = NoSqlPack.packMongoBySysLogException(log); @@ -355,13 +360,13 @@ public class SysLogMongoService implements ISysLogService { @Override public void actionCleanLog(String startTime, String endTime) { - try{ + try { SysLogOperate operate = new SysLogOperate(); operate.setCreateDatetime(startTime); operate.setCreateDateTimeStart(startTime); operate.setCreateDateTimeEnd(endTime); deleteLogOperate(operate); - }catch (Exception e){ + } catch (Exception e) { } try { @@ -370,7 +375,7 @@ public class SysLogMongoService implements ISysLogService { system.setCreateDateTimeStart(startTime); system.setCreateDateTimeEnd(endTime); deleteLogSystem(system); - }catch (Exception e){ + } catch (Exception e) { } try { @@ -379,7 +384,7 @@ public class SysLogMongoService implements ISysLogService { exception.setCreateDateTimeStart(startTime); exception.setCreateDateTimeEnd(endTime); deleteLogException(exception); - }catch (Exception e){ + } catch (Exception e) { } try { @@ -388,7 +393,7 @@ public class SysLogMongoService implements ISysLogService { taskTime.setCreateDateTimeStart(startTime); taskTime.setCreateDateTimeEnd(endTime); deleteLogTaskTime(taskTime); - }catch (Exception e){ + } catch (Exception e) { } try { @@ -397,7 +402,7 @@ public class SysLogMongoService implements ISysLogService { console.setCreateDateTimeStart(startTime); console.setCreateDateTimeEnd(endTime); deleteLogConsoleTime(console); - }catch (Exception e){ + } catch (Exception e) { } } @@ -467,6 +472,16 @@ public class SysLogMongoService implements ISysLogService { return resultData; } + @Override + public List querySysLog(SysLogModel logModel, Pager pager) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(cn.estsh.impp.framework.boot.exception.ImppExceptionEnum.DATABASE_EXCEPTION.getCode()) + .setErrorDetail("querySysLog 为elasticsearch使用方法") + .setErrorSolution("请联系管理人员") + .build(); + } + /******************************************************* 系统异常日志 End *********************************************************/ diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java index 7e64130..8ebc2d9 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/DefaultLoginStrategy.java @@ -7,7 +7,7 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; +import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.util.ImppRedis; @@ -46,7 +46,7 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService { private ISystemLoginService loginService; @Override - public BiFunction login() { + public BiFunction login() { return (request, loginModel) -> { ResultBean result; ValidatorBean.checkNotNull(loginModel.getLanguageCode(), "语言不能为空"); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java index b7c9091..bce9bd5 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/E9LoginStrategy.java @@ -10,7 +10,7 @@ import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.pojo.base.bean.BaseThreadLocal; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; -import cn.estsh.i3plus.pojo.model.platform.SystemLoginModel; +import cn.estsh.i3plus.pojo.model.platform.SysLoginModel; import cn.estsh.i3plus.pojo.platform.bean.SessionUser; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.util.ImppRedis; @@ -52,7 +52,7 @@ public class E9LoginStrategy implements ISystemLoginStrategyService { private ISystemLoginService loginService; @Override - public BiFunction login() { + public BiFunction login() { return (request, loginModel) -> { boolean isRequestFromSpecificIp = validateHost(request); if (!isRequestFromSpecificIp) { diff --git a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties index fda1e21..c76b663 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties +++ b/modules/i3plus-core-apiservice/src/main/resources/application-dev.properties @@ -25,6 +25,8 @@ impp.config.fileserver=fastdfs impp.log.detail.controller=true #\u662F\u5426\u5BF9\u8C03\u7528\u670D\u52A1\u8FDB\u884C\u8BE6\u7EC6\u65E5\u5FD7\u5206\u6790 impp.log.detail.service=true +# elasticsearch\u641C\u7D22\u670D\u52A1 +impp.config.elasticsearch=true #\u662F\u5426\u5F00\u542F\u5FAE\u670D eureka.client.enabled=true #\u6253\u5F00feign\u7684\u7194\u65AD diff --git a/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring-dev.xml b/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring-dev.xml index 527e43c..81fb966 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring-dev.xml +++ b/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring-dev.xml @@ -7,7 +7,7 @@ - [%p] %d{yyyy-MM-dd HH:mm:ss-SSS} %c(%M:%L) 信息:%m%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %p %c(%M:%L) - %m%n diff --git a/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml b/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml index 4c8d313..c529eee 100644 --- a/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml +++ b/modules/i3plus-core-apiservice/src/main/resources/log4j2-spring.xml @@ -9,8 +9,8 @@ - [%p] %d{yyyy-MM-dd HH:mm:ss-SSS} %c(%M:%L) 信息:%m%n - [%p] %d{yyyy-MM-dd HH:mm:ss-SSS} %-5level %class{36} %L %M - %msg%xEx%n + %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %p %c(%M:%L) - %m%n + %d{yyyy-MM-dd HH:mm:s.SSS} %p %-5level %class{36} %L %M - %msg%xEx%n From d4242786eff5c1460140b1af8ba9fd8cac6603f4 Mon Sep 17 00:00:00 2001 From: wynne1005 Date: Mon, 1 Mar 2021 10:20:37 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=A4=9A=E4=BD=99=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/apiservice/controller/busi/SysEnumController.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java index 648ce09..033a32c 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysEnumController.java @@ -127,18 +127,6 @@ public class SysEnumController extends CoreBaseController { } /** - * 日志类型 - * - * @return 处理结果 - */ - @GetMapping("/log-type") - @ApiOperation(value = "日志等级", notes = "日志等级") - public ResultBean getLogType() { - return new ResultBean(true, "操作成功", - LocaleUtils.getEnumLocaleResValuesToList(ImppEnumUtil.LOG_TYPE.values())); - } - - /** * 软件类型 * * @return 处理结果