Browse Source

新增直接登录接口

dev
周开红 2 months ago
parent
commit
d2fcdc6485
  1. 10
      src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java
  2. 2
      src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/AccessUserService.java
  3. 84
      src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/impl/AccessUserServiceImpl.java
  4. 2
      src/main/resources/bootstrap.yml

10
src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/controller/AccessUserController.java

@ -99,6 +99,16 @@ public class AccessUserController extends GaeaBaseController<AccessUserParam, Ac
}
/**
* 简单实现直接登录,用于兼容
* @param dto
* @return
*/
@PostMapping({"/directLogin"})
public ResponseBean directLogin(@RequestBody @Validated GaeaUserDto dto) {
return responseSuccessWithData(accessUserService.directLogin(dto));
}
/**
* 修改自己的密码
* @param dto
* @return

2
src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/AccessUserService.java

@ -43,6 +43,8 @@ public interface AccessUserService extends GaeaBaseService<AccessUserParam, Acce
*/
GaeaUserDto login(GaeaUserDto gaeaUserDto);
GaeaUserDto directLogin(GaeaUserDto gaeaUserDto);
/**
* 修改密码
* @param dto

84
src/main/java/com/anjiplus/template/gaea/business/modules/accessuser/service/impl/AccessUserServiceImpl.java

@ -14,6 +14,8 @@ import com.anji.plus.gaea.utils.GaeaUtils;
import com.anji.plus.gaea.utils.JwtBean;
import com.anjiplus.template.gaea.business.code.ResponseCode;
import com.anjiplus.template.gaea.business.constant.BusinessConstant;
import com.anjiplus.template.gaea.business.enums.DeleteFlagEnum;
import com.anjiplus.template.gaea.business.enums.EnableFlagEnum;
import com.anjiplus.template.gaea.business.modules.accessrole.dao.AccessRoleAuthorityMapper;
import com.anjiplus.template.gaea.business.modules.accessrole.dao.AccessRoleMapper;
import com.anjiplus.template.gaea.business.modules.accessrole.dao.entity.AccessRole;
@ -216,6 +218,88 @@ public class AccessUserServiceImpl implements AccessUserService {
return gaeaUser;
}
@Override
public GaeaUserDto directLogin(GaeaUserDto gaeaUserDto) {
String loginName = gaeaUserDto.getLoginName();
String password = gaeaUserDto.getPassword();
// 1.判断用户是否存在
LambdaQueryWrapper<AccessUser> wrapper = Wrappers.lambdaQuery();
wrapper.eq(AccessUser::getLoginName, loginName);
AccessUser accessUser = accessUserMapper.selectOne(wrapper);
if (null == accessUser) {
//没有用户,创建一个用户同时赋予默认角色
accessUser = new AccessUser();
accessUser.setLoginName(loginName);
accessUser.setRealName(loginName);
accessUser.setEnableFlag(EnableFlagEnum.ENABLE.getCodeValue());
accessUser.setDeleteFlag(DeleteFlagEnum.UNDELETED.getCodeValue());
accessUser.setCreateTime(new Date());
accessUser.setCreateBy(BusinessConstant.USER_ADMIN);
accessUser.setUpdateTime(new Date());
accessUser.setUpdateBy(BusinessConstant.USER_ADMIN);
accessUser.setVersion(1);
insert(accessUser);
//创建用户角色
AccessUserDto accessUserDto = new AccessUserDto();
accessUserDto.setLoginName(loginName);
//默认是报表角色
accessUserDto.setRoleCodeList(Arrays.asList("excel-report"));
saveRoleTree(accessUserDto);
}
// 2.密码错误
if (!accessUser.getPassword().equals(MD5Util.encrypt(password))) {
throw BusinessExceptionBuilder.build(ResponseCode.USER_PASSWORD_ERROR);
}
// 3.如果该用户登录未过期这里允许一个用户在多个终端登录
String tokenKey = String.format(BusinessConstant.GAEA_SECURITY_LOGIN_TOKEN, loginName);
String token = "";
GaeaUserDto gaeaUser = new GaeaUserDto();
if (cacheHelper.exist(tokenKey)) {
token = cacheHelper.stringGet(tokenKey);
} else {
// 生成用户token
String uuid = GaeaUtils.UUID();
token = jwtBean.createToken(loginName, uuid, 0, GaeaConstant.TENANT_CODE);
cacheHelper.stringSetExpire(tokenKey, token, 3600);
}
// 4.读取用户最新人权限主信息
String userKey = String.format(BusinessConstant.GAEA_SECURITY_LOGIN_USER, loginName);
//为了兼容底层其他数据库不再写自定义sql
// List<String> authorities = accessUserMapper.queryAuthoritiesByLoginName(loginName);
//当前用户的roleCode集合
LambdaQueryWrapper<AccessUserRole> accessUserWrapper = Wrappers.lambdaQuery();
accessUserWrapper.select(AccessUserRole::getRoleCode);
accessUserWrapper.eq(AccessUserRole::getLoginName, loginName);
List<AccessUserRole> accessUserRoles = accessUserRoleMapper.selectList(accessUserWrapper);
Set<String> roleCodeSet = accessUserRoles.stream().map(AccessUserRole::getRoleCode).collect(Collectors.toSet());
if (roleCodeSet.size() < 1) {
gaeaUser.setAuthorities(new ArrayList<>());
}else {
LambdaQueryWrapper<AccessRoleAuthority> accessRoleAuthorityWrapper = Wrappers.lambdaQuery();
accessRoleAuthorityWrapper.select(AccessRoleAuthority::getTarget, AccessRoleAuthority::getAction);
accessRoleAuthorityWrapper.in(AccessRoleAuthority::getRoleCode, roleCodeSet);
List<AccessRoleAuthority> accessRoleAuthorities = accessRoleAuthorityMapper.selectList(accessRoleAuthorityWrapper);
List<String> authorities = accessRoleAuthorities.stream()
.map(accessRoleAuthority -> accessRoleAuthority.getTarget().concat(":").concat(accessRoleAuthority.getAction())).distinct().collect(Collectors.toList());
gaeaUser.setAuthorities(authorities);
}
gaeaUser.setLoginName(loginName);
gaeaUser.setRealName(accessUser.getRealName());
gaeaUser.setToken(token);
String gaeaUserStr = JSONObject.toJSONString(gaeaUser);
cacheHelper.stringSetExpire(userKey, gaeaUserStr, 3600);
return gaeaUser;
}
/**
* 修改密码
*

2
src/main/resources/bootstrap.yml

@ -132,7 +132,7 @@ logging:
# 本应用自定义参数
customer:
# 跳过token验证和权限验证的url清单
skip-authenticate-urls: /gaeaDict/all, /login, /static, /file/download/, /index.html, /favicon.ico, /reportShare/detailByCode, /v2/api-docs, /reportExcel/exportExcel
skip-authenticate-urls: /gaeaDict/all, /login, /static, /file/download/, /index.html, /favicon.ico, /reportShare/detailByCode, /v2/api-docs, /reportExcel/exportExcel,/accessUser/directLogin
file:
#导入导出临时文件夹 默认.代表当前目录,拼接/tmp_zip/目录
tmpPath: .

Loading…
Cancel
Save