From 762458a1d593fa9193f81b8d851f355c53be5b50 Mon Sep 17 00:00:00 2001 From: wynne1005 Date: Tue, 11 May 2021 13:27:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E5=B9=B3=E5=8F=B0=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=94=A8=E6=88=B7=E5=90=8D=E7=99=BB=E5=BD=95=E6=96=B9?= =?UTF-8?q?=E5=BC=8F=20=E6=94=AF=E6=8C=81=E9=92=89=E9=92=89=E6=8E=88?= =?UTF-8?q?=E6=9D=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 平台添加用户名登录方式 支持钉钉授权 --- .../api/iservice/base/ISystemLoginService.java | 25 ++++++ modules/i3plus-core-apiservice/pom.xml | 6 ++ .../apiservice/auth/ShiroAuthConfiguration.java | 24 ++++++ .../realm/strategy/name/NameAdminAuthRealm.java | 55 +++++++++++++ .../auth/realm/strategy/name/NameSaAuthRealm.java | 50 ++++++++++++ .../realm/strategy/name/NameUserAuthRealm.java | 55 +++++++++++++ .../controller/base/WhiteController.java | 54 +++++++++++++ .../serviceimpl/base/SystemLoginService.java | 25 +++++- .../base/login/strategy/NameLoginStrategy.java | 92 ++++++++++++++++++++++ .../src/main/resources/application.properties | 2 +- pom.xml | 8 +- 11 files changed, 393 insertions(+), 3 deletions(-) create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameAdminAuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameSaAuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameUserAuthRealm.java create mode 100644 modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.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 eb5dcb5..5b3240c 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 @@ -92,6 +92,31 @@ public interface ISystemLoginService { SessionUser queryCheckE9SaAdminLogin(SaAdminToken saAdminToken); /** + * Name用户单点登录 + * + * @param userToken 用户token + * @return 用户会话 + */ + @ApiOperation(value = "封装用户", notes = "封装普通用户信息") + SessionUser queryCheckNameUserLogin(UserToken userToken); + /** + * NameAdmin单点登录 + * + * @param adminToken admin token + * @return 用户会话 + */ + @ApiOperation(value = "封装用户", notes = "封装管理员信息") + SessionUser queryCheckNameAdminLogin(AdminToken adminToken); + + /** + * Name SA单点登录 + * @param saAdminToken sa token + * @return 用户会话 + */ + @ApiOperation(value = "封装用户", notes = "封装超级管理员信息") + SessionUser queryCheckNameSaAdminLogin(SaAdminToken saAdminToken); + + /** * 记录登录错误 * * @param loginName 账号 diff --git a/modules/i3plus-core-apiservice/pom.xml b/modules/i3plus-core-apiservice/pom.xml index 3684557..6f40464 100644 --- a/modules/i3plus-core-apiservice/pom.xml +++ b/modules/i3plus-core-apiservice/pom.xml @@ -89,6 +89,11 @@ i3plus.sdk + i3plus-sdk-dingtalk + + + + i3plus.sdk i3plus-sdk-sms @@ -174,6 +179,7 @@ i3plus.pojo i3plus-pojo-mes + org.slf4j slf4j-api 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 c87079e..e6cafcb 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 @@ -7,6 +7,9 @@ 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.core.apiservice.auth.realm.strategy.name.NameAdminAuthRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.name.NameSaAuthRealm; +import cn.estsh.i3plus.core.apiservice.auth.realm.strategy.name.NameUserAuthRealm; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; @@ -107,6 +110,21 @@ public class ShiroAuthConfiguration { return new E9UserAuthRealm(); } + @Bean + public NameAdminAuthRealm nameAdminAuthRealm() { + return new NameAdminAuthRealm(); + } + + @Bean + public NameSaAuthRealm nameSaAuthRealm() { + return new NameSaAuthRealm(); + } + + @Bean + public NameUserAuthRealm nameUserAuthRealm() { + return new NameUserAuthRealm(); + } + public Map supportRealmMap() { //支持的授权规则 Map realms = new HashMap(8); @@ -123,6 +141,12 @@ public class ShiroAuthConfiguration { .saRealm(e9SaAuthRealm()).build(); realms.put(ImppEnumUtil.AUTH_LOGIN_STRATEGY.E9.getCode(), e9RoleRealmModel); + RoleRealmModel nameRoleRealmModel = RoleRealmModel.builder() + .userRealm(nameUserAuthRealm()) + .adminRealm(nameAdminAuthRealm()) + .saRealm(nameSaAuthRealm()).build(); + realms.put(ImppEnumUtil.AUTH_LOGIN_STRATEGY.NAME.getCode(), nameRoleRealmModel); + return realms; } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameAdminAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameAdminAuthRealm.java new file mode 100644 index 0000000..2276c16 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameAdminAuthRealm.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.name; + +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; +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 NameAdminAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(NameAdminAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public NameAdminAuthRealm() { + //添加支持的token + this.setAuthenticationTokenClass(AdminToken.class); + } + + //权限验证 + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + return new SimpleAuthorizationInfo(); + } + + //令牌确认 + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + try { + //管理员令牌 + SessionUser sessionUser = systemLoginService.queryCheckNameAdminLogin((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/name/NameSaAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameSaAuthRealm.java new file mode 100644 index 0000000..ad64399 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameSaAuthRealm.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.name; + +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 NameSaAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(NameSaAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public NameSaAuthRealm() { + //添加支持的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.queryCheckNameSaAdminLogin((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/name/NameUserAuthRealm.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameUserAuthRealm.java new file mode 100644 index 0000000..7d8b905 --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/auth/realm/strategy/name/NameUserAuthRealm.java @@ -0,0 +1,55 @@ +package cn.estsh.i3plus.core.apiservice.auth.realm.strategy.name; + +import cn.estsh.i3plus.core.api.iservice.base.ISystemLoginService; +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; + +/** + * @Description : 验证规则 + * @Reference :- + * @Author : alwaysfrin + * @CreateDate : 2018-10-13 14:04 + * @Modify: + **/ +public class NameUserAuthRealm extends AuthorizingRealm { + public static final Logger LOGGER = LoggerFactory.getLogger(NameUserAuthRealm.class); + + @Autowired + private ISystemLoginService systemLoginService; + + public NameUserAuthRealm() { + //添加支持的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.queryCheckNameUserLogin((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 9ce20e5..a4fba8d 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 @@ -28,6 +28,7 @@ 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.*; +import cn.estsh.i3plus.sdk.dingtalk.cn.estsh.i3plus.sdk.service.IDingTalkService; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; @@ -41,6 +42,8 @@ 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 com.dingtalk.api.response.OapiUserGetResponse; +import com.dingtalk.api.response.OapiV2UserGetResponse; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import io.swagger.annotations.Api; @@ -152,6 +155,9 @@ public class WhiteController extends CoreBaseController { @Autowired private RabbitTemplate rabbitTemplate; + @Autowired + private IDingTalkService dingTalkService; + private Cache unsavedLocaleResSwitch = CacheBuilder.newBuilder() .maximumSize(1) .expireAfterWrite(1, TimeUnit.MINUTES) @@ -293,6 +299,54 @@ public class WhiteController extends CoreBaseController { return Optional.ofNullable(data); } + @GetMapping(value = "/auth/dingtalk/login") + @ApiOperation(value = "登录", notes = "登录") + public ResultBean loginByPhoneNumber(HttpServletRequest request, String dingTalkTmpAuthCode, + @RequestParam(required = false) String languageCode, + @RequestParam(required = false) String deviceId) { + SysLoginModel loginModel = SysLoginModel.builder() + .dingTalkTmpAuthCode(dingTalkTmpAuthCode) + .languageCode(languageCode) + .deviceId(deviceId) + .loginStrategy(ImppEnumUtil.AUTH_LOGIN_STRATEGY.NAME.getCode()).build(); + + String dingTalkUrl = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_URL); + String dingTalkAppKey = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_KEY); + String dingTalkAppSecret = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_APP_SECRET); + String dingTalkWhiteList = RedisCacheTool.getSysConfigStrVal(PlatformConstWords.DINGTALK_WHITE_LIST); + + if (StringUtils.isEmpty(dingTalkUrl) || + StringUtils.isEmpty(dingTalkAppKey) || + StringUtils.isEmpty(dingTalkAppSecret) || + StringUtils.isEmpty(dingTalkWhiteList)) { + return ResultBean.fail("访问钉钉的系统参数缺失,请在平台的系统参数中进行配置"); + } + + Optional userInfo = + dingTalkService.getUserInfo(dingTalkUrl, dingTalkAppKey, dingTalkAppSecret, loginModel.getDingTalkTmpAuthCode()); + if (userInfo.isPresent()) { + String mobile = userInfo.get().getResult().getMobile(); + if (StringUtils.isEmpty(mobile)) { + return ResultBean.fail("用户并未在钉钉中设置手机号 或 钉钉接口权限不足无法获取到手机号"); + } + if (!Arrays.asList(dingTalkWhiteList.split(",")).contains(mobile)) { + return ResultBean.fail("对指定手机号允许,权限不足,请联系管理员"); + } + SysUser sysUserByPhone = userService.getSysUserByPhone(mobile); + if (sysUserByPhone == null) { + return ResultBean.fail("未根据用户手机在平台中找到相应记录 钉钉获取的手机号为" + mobile); + } + loginModel.setLoginName(sysUserByPhone.getUserLoginName()); + loginModel.setPhoneNumber(mobile); + } else { + return ResultBean.fail("获取钉钉用户信息失败"); + } + String beanName = ImppEnumUtil.AUTH_LOGIN_STRATEGY.codeOfStrategyName(loginModel.getLoginStrategy()); + ISystemLoginStrategyService loginStrategyService = (ISystemLoginStrategyService) SpringContextsUtil.getBean(beanName); + + return loginByStrategy(request, loginModel, loginStrategyService.login()); + } + @GetMapping(value = "/auth/login") @ApiOperation(value = "登录", notes = "登录") public ResultBean login(HttpServletRequest request, String loginName, String loginPwd, 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 af43f3a..639f004 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 @@ -73,7 +73,7 @@ public class SystemLoginService implements ISystemLoginService { } public static void main(String[] args) { - System.out.println(1+2+"a"); + System.out.println(1 + 2 + "a"); } @Override @@ -138,6 +138,29 @@ public class SystemLoginService implements ISystemLoginService { } @Override + public SessionUser queryCheckNameUserLogin(UserToken userToken) { + //验证用户 + SysUser user = getUserLoginInfo(userToken.getLoginName()); + LOGGER.info("【验证用户checkUserLogin】{}", user); + //用户单地登录 + return packSessionUser(user, CommonEnumUtil.USER_TYPE.USER.getCode(), userToken.getLanguageCode()); + } + + @Override + public SessionUser queryCheckNameAdminLogin(AdminToken adminToken) { + //验证用户 + SysUser user = getUserLoginInfo(adminToken.getLoginName()); + //未抛异常,封装用户 + return packSessionUser(user, CommonEnumUtil.USER_TYPE.ADMIN.getCode(), adminToken.getLanguageCode()); + } + + @Override + public SessionUser queryCheckNameSaAdminLogin(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"}, diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java new file mode 100644 index 0000000..c78ce6e --- /dev/null +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/login/strategy/NameLoginStrategy.java @@ -0,0 +1,92 @@ +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.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; +import cn.estsh.impp.framework.boot.util.RedisCacheTool; +import cn.estsh.impp.framework.boot.util.ResultBean; +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; + +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 NameLoginStrategy 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) -> { + licenseClickService.checkLicenseNumberLogin(); + + // TODO 后期移除,暂时用于避免自动登录后前台没有正确的传输组织代码信息 + if ("null".equals(loginModel.getLanguageCode())|| StringUtils.isEmpty(loginModel.getLanguageCode())) { + loginModel.setLanguageCode(DEFAULT_LANGUAGE); + } + + // 设置语言代码 + BaseThreadLocal.setData(BaseThreadLocal.LANGUAGE_CODE, loginModel.getLanguageCode()); + BaseThreadLocal.setData(PlatformConstWords.AUTH_LOGIN_STRATEGY, ImppEnumUtil.AUTH_LOGIN_STRATEGY.NAME.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.loginUser( + loginModel.getLoginName().trim(), + loginModel.getLoginName().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 result; + }; + } +} diff --git a/modules/i3plus-core-apiservice/src/main/resources/application.properties b/modules/i3plus-core-apiservice/src/main/resources/application.properties index 229a7b5..5c57413 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=dev +spring.profiles.active=test #\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 66fac15..aee75c4 100644 --- a/pom.xml +++ b/pom.xml @@ -129,6 +129,12 @@ i3plus.sdk + i3plus-sdk-dingtalk + ${project.version} + + + + i3plus.sdk i3plus-sdk-wechat ${project.version} @@ -189,7 +195,7 @@ mysql mysql-connector-java - 5.1.39 + 5.1.49