Merge remote-tracking branch 'upstream/test' into test

yun-zuoyi
castle.zang 4 years ago
commit 1c0d29c7e8

@ -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

@ -4,8 +4,6 @@ import cn.estsh.i3plus.pojo.platform.bean.SysUserPassword;
import cn.estsh.impp.framework.base.service.ICrudService;
import io.swagger.annotations.ApiOperation;
import java.util.List;
/**
* @Description :
* @Reference :
@ -24,7 +22,11 @@ public interface ISysUserPasswordService extends ICrudService<SysUserPassword> {
@ApiOperation(value = "修改用户密码")
void updatePassword(Long userId,String password,String newPwd);
@ApiOperation(value = "修改用户密码")
void updatePassword(String loginName,String password,String newPwd);
@ApiOperation(value = "重置用户密码")
void updatePassword(Long userId,String password);
void updatePasswordWizoutSession(String loginName,String password,String newPwd);
}

@ -3,7 +3,11 @@ package cn.estsh.i3plus.core.api.iservice.busi;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.shirotoken.BaseToken;
import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.i3plus.pojo.platform.bean.SysLogUserLogin;
import cn.estsh.i3plus.pojo.platform.bean.SysRefUserRole;
import cn.estsh.i3plus.pojo.platform.bean.SysUser;
import cn.estsh.i3plus.pojo.platform.bean.SysUserInfo;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authc.AuthenticationException;
@ -300,4 +304,14 @@ public interface ISysUserService {
*/
@ApiOperation(value = "根据id查询用户信息")
List<SysUser> findSysUserByIds(Long[] ids);
/**
*
*
* @param loginName
* @param password
*/
@ApiOperation(value = "根据用户名查询密码是否正确")
SysUser validatePasswordByLoginNameAndReturnUser(String loginName, String password);
}

@ -89,6 +89,11 @@
<dependency>
<groupId>i3plus.sdk</groupId>
<artifactId>i3plus-sdk-dingtalk</artifactId>
</dependency>
<dependency>
<groupId>i3plus.sdk</groupId>
<artifactId>i3plus-sdk-sms</artifactId>
</dependency>
@ -174,6 +179,7 @@
<groupId>i3plus.pojo</groupId>
<artifactId>i3plus-pojo-mes</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
@ -337,4 +343,13 @@
</profile>
</profiles>
<distributionManagement>
<repository>
<id>public</id>
<!-- CHANGE HERE by your team nexus server -->
<url>http://mvn.estsh.com/repository/maven-public/</url>
</repository>
</distributionManagement>
</project>

@ -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<String, RoleRealmModel> supportRealmMap() {
//支持的授权规则
Map<String, RoleRealmModel> 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;
}

@ -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());
}
}
}

@ -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());
}
}

@ -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());
}
}
}

@ -1,12 +1,10 @@
package cn.estsh.i3plus.core.apiservice.controller.base;
import cn.estsh.i3plus.core.api.iservice.busi.ISysDictionaryService;
import cn.estsh.i3plus.icloud.wms.sdk.IWmsCommonCloud;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserPasswordService;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil;
import cn.estsh.impp.framework.boot.configuration.SystemConfig;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ImppRedis;
@ -28,7 +26,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
/**
* @Description :
@ -47,17 +49,11 @@ public class SystemController {
@Autowired
private Environment environment;
@Autowired
private IWmsCommonCloud wmsCommonCloud;
@Resource(name = CommonConstWords.IMPP_REDIS_CORE)
protected ImppRedis redisCore;
@Autowired
private ISysDictionaryService sysDictionaryService;
@Autowired
private SystemConfig systemConfig;
private ISysUserPasswordService userPasswordService;
@GetMapping("/get-properties")
@ApiOperation(value = "获取系统配置信息", notes = "获取系统配置信息")
@ -139,4 +135,5 @@ public class SystemController {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
}

@ -2,7 +2,6 @@ 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;
@ -29,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;
@ -42,11 +42,15 @@ 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.OapiV2UserGetResponse;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
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.ExpiredCredentialsException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
@ -75,6 +79,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
@ -132,7 +137,7 @@ public class WhiteController extends CoreBaseController {
private ISysConfigService configService;
@Autowired
private ISystemLoginService loginService;
private ISysUserPasswordService userPasswordService;
@Autowired
private SysUserPasswordUtil userPasswordUtil;
@ -149,6 +154,14 @@ public class WhiteController extends CoreBaseController {
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private IDingTalkService dingTalkService;
private Cache<String, Integer> unsavedLocaleResSwitch = CacheBuilder.newBuilder()
.maximumSize(1)
.expireAfterWrite(1, TimeUnit.MINUTES)
.build();
@GetMapping(value = "/sys-locale-language/list")
@ApiOperation(value = "查询可用语言", notes = "查询可用语言")
public ResultBean listSysLocaleLanguage() {
@ -285,6 +298,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<OapiV2UserGetResponse> 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,
@ -316,8 +377,10 @@ public class WhiteController extends CoreBaseController {
} catch (IncorrectCredentialsException e) {
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_PASSWORD);
userPasswordUtil.checkLoginErrorNumber(loginModel.getLoginName(), result, e);
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.WRONG_PASSWORD;
} catch (ExpiredCredentialsException e) {
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_PASSWORD_EXPIRED);
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.WRONG_USERNAME_OR_PASSWORD;
} catch (CredentialsException e) {
// 用户名或密码错误
result = ResultBean.fail(ImppExceptionEnum.LOGIN_EXCEPTION_USER_NAME);
@ -335,13 +398,16 @@ public class WhiteController extends CoreBaseController {
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;
LOGGER.warn("Impp业务异常AuthenticationException 登录失败 ", e);
} catch (ImppBusiException e) {
result = ResultBean.fail(e);
userLoginStatus = CommonEnumUtil.USER_LOGIN_STATUS.SYSTEM_ERROR;
LOGGER.warn("Impp业务异常ImppBusiException 登录失败 ", e);
} 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;
LOGGER.warn("Impp业务异常Exception 登录失败 ", e);
} finally {
// 记录登录记录
recordSysUserLog(null, loginModel.getLoginName(), userLoginStatus.getValue());
@ -685,6 +751,17 @@ public class WhiteController extends CoreBaseController {
@ApiOperation(value = "缺失资源", notes = "缺失资源")
public ResultBean getMissResourceByKey(String key, String menuCode) {
try {
Integer switcher = unsavedLocaleResSwitch.asMap().get(PlatformConstWords.WEB_MISS_RESOURCE_LISTENER_SWITCH);
if (switcher == null) {
switcher = RedisCacheTool.getSysConfigIntVal(PlatformConstWords.WEB_MISS_RESOURCE_LISTENER_SWITCH,
CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
unsavedLocaleResSwitch.put(PlatformConstWords.WEB_MISS_RESOURCE_LISTENER_SWITCH, switcher);
}
if (switcher == -1 || switcher == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) {
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
}
Map<String, String> missResource = new HashMap<>();
missResource.put(key, menuCode);
rabbitTemplate.convertAndSend(PlatformConstWords.QUEUE_IMPP_RESOURCE, JsonUtilTool.encode(missResource));
@ -717,6 +794,24 @@ public class WhiteController extends CoreBaseController {
}
}
@PutMapping(value = "/update-expired-password")
@ApiOperation(value = "修改密码", notes = "松下修改当前登录用户密码")
public ResultBean updateSysUserPassword(String loginName, String password, String newPwd) {
try {
// 数据校验
ValidatorBean.checkNotNull(password, "旧密码不能为空");
ValidatorBean.checkNotNull(newPwd, "新密码不能为空");
ValidatorBean.checkNotNull(loginName, "用户名不能为空");
userPasswordService.updatePasswordWizoutSession(loginName, password, newPwd.trim());
return ResultBean.success("修改密码成功,请重新登陆").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode());
} catch (ImppBusiException busExcep) {
return ResultBean.fail(busExcep);
} catch (Exception e) {
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
}
}
@PostMapping(value = "/license")
@ApiOperation(value = "更新授权", notes = "更新授权")
public ResultBean updateLicense(String content) {

@ -22,6 +22,7 @@ import cn.estsh.i3plus.pojo.model.platform.UserDetailModel;
import cn.estsh.i3plus.pojo.model.platform.UserDetailPagerModel;
import cn.estsh.i3plus.pojo.model.platform.UserRolePagerModel;
import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.i3plus.pojo.platform.repository.SysUserPasswordRepository;
import cn.estsh.impp.framework.base.controller.CoreBaseController;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
@ -87,8 +88,12 @@ public class PersonnelController extends CoreBaseController {
@Autowired
private SysUserPasswordUtil userPasswordUtil;
@Autowired
private SysUserPasswordRepository userPasswordRDao;
/**
*
*
* @param model
* @return
*/
@ -147,7 +152,17 @@ public class PersonnelController extends CoreBaseController {
user.setOrganizeNameRdd(userOrganize.getName());
user.setOrganizeCode(userOrganize.getOrganizeCode());
user.setUserInfoId(info.getId());
user.setUserPasswordLastModifyTime(TimeTool.getNowTime(true));
refreshSysUserPassword(user);
SysUser userSaved=personnelService.saveSysUser(user);
// 添加保存passwordId进SysUser表
SysUserPassword pwd = new SysUserPassword();
pwd.setUserId(userSaved.getId());
pwd.setUserPassword(userSaved.getUserLoginPassword());
ConvertBean.serviceModelInitialize(pwd, userSaved.getUserName());
SysUserPassword savedPassword = userPasswordRDao.save(pwd);
user.setUserLoginPasswordId(savedPassword.getId());
personnelService.saveSysUser(user);
info.setUserId(user.getId());
@ -167,6 +182,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @return
*/
@ -256,6 +272,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @return
*/
@ -290,6 +307,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param id id
* @return
*/
@ -330,6 +348,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param id id
* @return
*/
@ -359,6 +378,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param id id
* @return
*/
@ -389,6 +409,7 @@ public class PersonnelController extends CoreBaseController {
/**
* id
*
* @param ids id
* @return
*/
@ -434,6 +455,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param id id
* @return
*/
@ -464,6 +486,7 @@ public class PersonnelController extends CoreBaseController {
/**
* id
*
* @param ids ids
* @return
*/
@ -509,6 +532,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @return
*/
@ -538,6 +562,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @return
*/
@ -564,6 +589,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @return
*/
@ -582,6 +608,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @return
*/
@ -600,6 +627,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @param model
* @return
*/
@ -618,6 +646,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @return
*/
@GetMapping(value = "/user/get-organize-list")
@ -709,9 +738,7 @@ public class PersonnelController extends CoreBaseController {
.notNull("infoName", model.getInfoName())
.notNull("infoEmpNo", model.getInfoEmpNo())
.notNull("userDepartmentId", model.getUserDepartmentId())
.notNull("userLoginName", model.getUserLoginName())
.notNull("userEmail", model.getUserEmail())
.notNull("userPhone", model.getUserPhone());
.notNull("userLoginName", model.getUserLoginName());
}
/**
@ -782,6 +809,7 @@ public class PersonnelController extends CoreBaseController {
/**
* code
*
* @param code
* @return
*/
@ -802,6 +830,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @return
*/
@GetMapping(value = "/organize/list")
@ -821,6 +850,7 @@ public class PersonnelController extends CoreBaseController {
/**
*
*
* @return
*/
@GetMapping(value = "/license")

@ -13,10 +13,12 @@ import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.FileContentTypeTool;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ImppFile;
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.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.model.common.CloudPagerModel;
import cn.estsh.i3plus.pojo.model.platform.MissResourceModel;
import cn.estsh.i3plus.pojo.platform.bean.SysFile;
import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage;
@ -26,7 +28,6 @@ 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.fileservice.ImppFileService;
import cn.estsh.i3plus.pojo.base.bean.ImppFile;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
@ -128,7 +129,7 @@ public class SysLocaleResourceController extends CoreBaseController {
*/
@PutMapping(value = "/update")
@ApiOperation(value = "修改语言资源",notes = "修改语言资源")
public ResultBean updateSysLocaleResource(SysLocaleResource sysLocaleResource) {
public ResultBean updateSysLocaleResource(@RequestBody SysLocaleResource sysLocaleResource) {
try {
//条件验证
ValidatorBean.beginValid(sysLocaleResource)
@ -202,7 +203,6 @@ public class SysLocaleResourceController extends CoreBaseController {
/**
*
* @param sysLocaleResource
* @param pager
* @return
*/
@ -219,6 +219,21 @@ public class SysLocaleResourceController extends CoreBaseController {
}
}
//
// @PostMapping(value = "/query")
// @ApiOperation(value = "语言资源复杂查询,分页,排序",notes = "语言资源复杂查询,分页,排序")
// public ResultBean querySysLocaleResourceByPager(@RequestBody CloudPagerModel<SysLocaleResource> pager){
// try {
// ListPager sysLocaleLanguageListPager =
// sysLocaleResourceService.querySysLocaleResourceByPager(pager.getObj(),pager.getPager());
// return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setListPager(sysLocaleLanguageListPager);
// }catch(ImppBusiException busExcep){
// return ResultBean.fail(busExcep);
// }catch(Exception e){
// return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
// }
// }
/**
*
* @param idsStr id

@ -1,8 +1,13 @@
package cn.estsh.i3plus.core.apiservice.controller.busi;
import cn.estsh.i3plus.core.api.iservice.busi.*;
import cn.estsh.i3plus.core.apiservice.util.SysUserPasswordUtil;
import cn.estsh.i3plus.core.api.iservice.busi.ICoreMemTreeService;
import cn.estsh.i3plus.core.api.iservice.busi.IPersonnelService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysMessageService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserInfoService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserPasswordService;
import cn.estsh.i3plus.core.api.iservice.busi.ISysUserService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.i3plus.platform.common.tool.EncryptTool;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -13,12 +18,16 @@ 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.base.enumutil.ResourceEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.i3plus.pojo.platform.bean.SysMessage;
import cn.estsh.i3plus.pojo.platform.bean.SysRefUserDepartment;
import cn.estsh.i3plus.pojo.platform.bean.SysRefUserRole;
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.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.util.ResultBean;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import io.swagger.annotations.Api;
@ -27,7 +36,13 @@ import org.apache.commons.lang3.RandomStringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;

@ -29,6 +29,8 @@ import org.springframework.context.annotation.Configuration;
import java.io.IOException;
import java.io.InputStream;
import static cn.estsh.i3plus.platform.common.util.CommonConstWords.CONFIG_APP_STATE_CHANGE_NOTICE;
/**
* @Description :
* @Reference :
@ -119,7 +121,16 @@ public class MessageMailQueueReceiver {
// 判断收件人类型
if (msg.getMessageReceiverType() != null) {
if (msg.getMessageReceiverType() == ImppEnumUtil.MESSAGE_RECEIVER_TYPE.EXTERNAL.getValue()) {
if (msg.getMessageReceiverType() == ImppEnumUtil.MESSAGE_RECEIVER_TYPE.URGENT.getValue()
&& RedisCacheTool.getSysConfigBooleanVal(CONFIG_APP_STATE_CHANGE_NOTICE)) {
// 判断是否为系统紧急提示 微服注册状态提示
mailUtil.setTo(RedisCacheTool.getSysConfigStrVal(PlatformConstWords.CONTACT_MAIL));
try {
mailUtil.send();
} catch (Exception e) {
saveSendErrorMsg(msg, RedisCacheTool.getSysConfigStrVal(PlatformConstWords.CONTACT_MAIL), e);
}
} else if (msg.getMessageReceiverType() == ImppEnumUtil.MESSAGE_RECEIVER_TYPE.EXTERNAL.getValue()) {
//判断是否为外部邮件
mailUtil.setTo(StringUtils.split(msg.getMessageReceiversNameRdd(), ","));
try {

@ -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"},

@ -2,24 +2,32 @@ 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.SysLoginModel;
import cn.estsh.i3plus.pojo.platform.bean.SessionUser;
import cn.estsh.i3plus.pojo.platform.bean.SysConfig;
import cn.estsh.i3plus.pojo.platform.bean.SysUser;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
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.lang3.StringUtils;
import org.apache.shiro.authc.ExpiredCredentialsException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.function.BiFunction;
import static cn.estsh.i3plus.platform.common.util.CommonConstWords.DEFAULT_LANGUAGE;
@ -37,9 +45,6 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService {
protected ImppRedis redisCore;
@Autowired
private ILicenseClickService licenseClickService;
@Autowired
private ISysUserService userService;
@Autowired
@ -65,6 +70,10 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService {
if (sessionMode != CommonEnumUtil.SESSION_MODE.SEIZE.getValue()) {
AuthUtil.logout();
}
// 已经对用户名和密码做过验证了
// 获取系统参数【密码过期时间】 进行密码有效时间判断
userService.validatePasswordByLoginNameAndReturnUser(loginModel.getLoginName(),loginModel.getLoginPwd());
validatePasswordIsExpired(loginModel.getLoginName());
SessionUser user = userService.loginUser(
loginModel.getLoginName().trim(),
@ -84,4 +93,30 @@ public class DefaultLoginStrategy implements ISystemLoginStrategyService {
return result;
};
}
private void validatePasswordIsExpired(String loginName) {
SysConfig passwordExpireSwitch = RedisCacheTool.getSysConfigByConfigCode(CommonConstWords.CONFIG_PWD_EXPIRE_SWITCH);
if (passwordExpireSwitch != null
&& CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == Integer.parseInt(passwordExpireSwitch.getConfigValue())) {
SysConfig passwordExpireDays = RedisCacheTool.getSysConfigByConfigCode(CommonConstWords.CONFIG_PWD_EXPIRE_DAY_TIME);
if (passwordExpireDays != null && Integer.parseInt(passwordExpireDays.getConfigValue()) > 0) {
SysUser user = userService.getSysUserByLoginName(loginName);
if (StringUtils.isEmpty(user.getUserPasswordLastModifyTime())) {
throw new ExpiredCredentialsException("用户密码过期 请重新设置新密码");
} else {
DateFormat df = new SimpleDateFormat(CommonConstWords.DATE_TIME_FORMAT_HH_MM_SS_RISK);
Date lastModifyDate = null;
try {
lastModifyDate = df.parse(user.getUserPasswordLastModifyTime());
} catch (ParseException e) {
throw new ImppBusiException("验证用户密码登录时间,时间解析错误");
}
long dayGap = (System.currentTimeMillis() - lastModifyDate.getTime()) / (60 * 60 * 1000 * 24);
if ((int) dayGap >= Integer.parseInt(passwordExpireDays.getConfigValue())) {
throw new ExpiredCredentialsException("用户密码过期 请重新设置新密码");
}
}
}
}
}
}

@ -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<HttpServletRequest, SysLoginModel, ResultBean> 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;
};
}
}

@ -15,14 +15,11 @@ import cn.estsh.impp.framework.base.service.CrudService;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Description :
* @Reference :
@ -68,6 +65,23 @@ public class SysUserSavePasswordService extends CrudService<SysUserPassword> imp
}
@Override
public void updatePassword(String loginName, String password, String newPwd) {
SysUser user = userService.getSysUserByLoginName(loginName);
SysUserPassword userPassword = userPasswordRDao.getById(user.getUserLoginPasswordId());
ValidatorBean.checkNotNull(userPassword, "不存在的用户密码信息");
if (StringUtils.equals(userPassword.getUserPassword(), password)) {
throw ImppExceptionBuilder.newInstance()
.setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode())
.setErrorCode(ImppExceptionEnum.NOT_CONFIG_EXCEPTION.getCode())
.setErrorDetail("原始密码错误")
.setErrorSolution("请重新操作")
.build();
}
updatePassword(user.getId(), newPwd);
}
@Override
public void updatePassword(Long userId, String password) {
SysUser user = userService.getSysUserById(userId);
ValidatorBean.checkNotNull(user, "不存在的用户信息");
@ -88,7 +102,33 @@ public class SysUserSavePasswordService extends CrudService<SysUserPassword> imp
SysUserPassword save = userPasswordRDao.save(pwd);
user.setUserLoginPasswordId(save.getId());
user.setUserPasswordLastModifyTime(TimeTool.getNowTime(true));
ConvertBean.serviceModelUpdate(user, AuthUtil.getSessionUser().getUserName());
userService.updateSysUser(user);
}
@Override
public void updatePasswordWizoutSession(String loginName, String password, String newPwd) {
SysUser user = userService.validatePasswordByLoginNameAndReturnUser(loginName, password);
user.setUserLoginPassword(password);
userPasswordUtil.checkPasswordSave(user);
userPasswordRDao.updateByProperties(
new String[]{"userId", "isDeleted"},
new Object[]{user.getId(), CommonEnumUtil.IS_DEAL.NO.getValue()},
new String[]{"isDeleted", "modifyDatetime", "modifyUser"},
new Object[]{
CommonEnumUtil.IS_DEAL.YES.getValue(), TimeTool.getNowTime(true), loginName});
SysUserPassword pwd = new SysUserPassword();
pwd.setUserId(user.getId());
pwd.setUserPassword(SysUserPasswordUtil.encoder(newPwd));
ConvertBean.serviceModelInitialize(pwd, loginName);
SysUserPassword save = userPasswordRDao.save(pwd);
user.setUserLoginPasswordId(save.getId());
user.setUserPasswordLastModifyTime(TimeTool.getNowTime(true));
ConvertBean.serviceModelUpdate(user, loginName);
userService.updateSysUser(user);
}
}

@ -1,9 +1,9 @@
package cn.estsh.i3plus.core.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.core.api.iservice.busi.*;
import cn.estsh.i3plus.core.apiservice.dao.IUserPermissionDao;
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.EncryptTool;
import cn.estsh.i3plus.platform.common.tool.StringTool;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -20,11 +20,15 @@ import cn.estsh.i3plus.pojo.base.shirotoken.UserToken;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.tool.HqlPack;
import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.i3plus.pojo.platform.repository.*;
import cn.estsh.i3plus.pojo.platform.repository.SysLogUserLoginRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysRefUserDepartmentRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysRefUserPositionRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysRefUserRoleRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysUserInfoRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysUserRepository;
import cn.estsh.i3plus.pojo.platform.sqlpack.CoreHqlPack;
import cn.estsh.impp.framework.boot.auth.AuthUtil;
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum;
import cn.estsh.impp.framework.boot.util.ImppRedis;
import cn.estsh.impp.framework.boot.util.RedisCacheTool;
import cn.estsh.impp.framework.boot.util.ValidatorBean;
@ -33,6 +37,7 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.CredentialsException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -42,7 +47,15 @@ import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
@ -124,7 +137,6 @@ public class SysUserService implements ISysUserService {
BaseToken token = getToken(loginName, password, languageCode, loginPlatform);
SessionUser sessionUser = AuthUtil.login(token);
SysUser user = this.getSysUserByLoginName(loginName);
if (user == null) {
throw new CredentialsException("用户不存在");
}
@ -713,6 +725,24 @@ public class SysUserService implements ISysUserService {
return userRDao.findByHqlWhere(ddlPackBean);
}
@Override
public SysUser validatePasswordByLoginNameAndReturnUser(String loginName, String password) {
SysUser userDb = getSysUserByLoginName(loginName);
ValidatorBean.checkNotNull(userDb, "不存在的用户信息");
if (userDb.getUserLoginPasswordId() == null || userDb.getUserLoginPasswordId() <= 0) {
if (!userDb.getUserLoginPassword().equals(SysUserPasswordUtil.encoder(password))) {
throw new IncorrectCredentialsException("用户密码错误");
}
} else {
SysUserPassword userPassword = userPasswordService.get(userDb.getUserLoginPasswordId());
if (!userPassword.getUserPassword().equals(SysUserPasswordUtil.encoder(password))) {
throw new IncorrectCredentialsException("用户密码错误");
}
}
return userDb;
}
/**
*
*

@ -129,6 +129,12 @@
<dependency>
<groupId>i3plus.sdk</groupId>
<artifactId>i3plus-sdk-dingtalk</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>i3plus.sdk</groupId>
<artifactId>i3plus-sdk-wechat</artifactId>
<version>${project.version}</version>
</dependency>
@ -189,7 +195,7 @@
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
<version>5.1.49</version>
</dependency>
<!-- oracle -->

Loading…
Cancel
Save