登陆代码迁移jianquan接口鉴权dengchu

This commit is contained in:
houjishuang
2025-06-20 10:49:29 +08:00
parent fa1a3898a4
commit ab793c16a6
5 changed files with 92 additions and 18 deletions

View File

@ -61,5 +61,13 @@ public class LoginController {
return BaseResponse.success(null); return BaseResponse.success(null);
} }
} }
@ApiOperation("登出")
@PostMapping("/logout")
public BaseResponse<Boolean> logout(HttpServletRequest request) {
Boolean result = iBaseUserService.logout(request);
return BaseResponse.success(result);
}
} }

View File

@ -10,6 +10,7 @@ import com.chinaunicom.mall.ebtp.login.entity.BaseUserSelect;
import com.chinaunicom.mall.ebtp.login.entity.BaseUserSelectVo; import com.chinaunicom.mall.ebtp.login.entity.BaseUserSelectVo;
import com.coscoshipping.ebtp.project.user.entity.SysUser; import com.coscoshipping.ebtp.project.user.entity.SysUser;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
@ -26,4 +27,6 @@ public interface BaseUserService extends IBaseService<SysUser> {
void setCookie(HttpServletResponse response, String name, String value); void setCookie(HttpServletResponse response, String name, String value);
SecurityEntity bdCheckToken(String token); SecurityEntity bdCheckToken(String token);
Boolean logout(HttpServletRequest request);
} }

View File

@ -11,12 +11,14 @@ import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService; import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService;
import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl; import com.chinaunicom.mall.ebtp.common.base.service.impl.BaseServiceImpl;
import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum; import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
import com.chinaunicom.mall.ebtp.login.common.Constants; import com.chinaunicom.mall.ebtp.login.common.Constants;;
import com.chinaunicom.mall.ebtp.login.common.RSA; import com.chinaunicom.mall.ebtp.login.common.RSA;
import com.chinaunicom.mall.ebtp.login.dao.BaseUserMapper; import com.chinaunicom.mall.ebtp.login.dao.BaseUserMapper;
import com.chinaunicom.mall.ebtp.login.entity.*; import com.chinaunicom.mall.ebtp.login.entity.*;
import com.chinaunicom.mall.ebtp.login.service.BaseUserService; import com.chinaunicom.mall.ebtp.login.service.BaseUserService;
import com.chinaunicom.mall.ebtp.login.service.BaseUserTokenService; import com.chinaunicom.mall.ebtp.login.service.BaseUserTokenService;
import com.coscoshipping.ebtp.project.org.entity.SysOrg;
import com.coscoshipping.ebtp.project.org.service.SysOrgService;
import com.coscoshipping.ebtp.project.user.entity.SysUser; import com.coscoshipping.ebtp.project.user.entity.SysUser;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
@ -25,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; import org.springframework.web.context.request.ServletRequestAttributes;
@ -72,6 +75,8 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
@Autowired @Autowired
private UserInfoService userInfoService; private UserInfoService userInfoService;
@Autowired
private SysOrgService sysOrgService;
@Autowired(required = false) @Autowired(required = false)
@Qualifier("cacheRedisTemplate") @Qualifier("cacheRedisTemplate")
private RedisTemplate<String, Object> redisTemplate; private RedisTemplate<String, Object> redisTemplate;
@ -243,8 +248,11 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
securityEntity.setStaffName(baseUser.getName()); securityEntity.setStaffName(baseUser.getName());
securityEntity.setOu(baseUser.getOrgId());//部门id securityEntity.setOu(baseUser.getOrgId());//部门id
securityEntity.setOuName(baseUser.getOrgName()); securityEntity.setOuName(baseUser.getOrgName());
securityEntity.setOrgId("1");//公司Id SysOrg company = sysOrgService.getCompanyByOrgId(baseUser.getOrgId());
securityEntity.setOrgName("中远"); if (company != null) {
securityEntity.setOrgId(company.getOrgId());//公司id
securityEntity.setOrgName(company.getOrgName());
}
securityEntity.setUserSource("0");//账号类型中远 securityEntity.setUserSource("0");//账号类型中远
List<AuthorityEntity> authorityList =this.baseUserMapper.selectRoleByUserId(baseUser.getUserId());; List<AuthorityEntity> authorityList =this.baseUserMapper.selectRoleByUserId(baseUser.getUserId());;
securityEntity.setAuthorityList(authorityList); securityEntity.setAuthorityList(authorityList);
@ -272,6 +280,43 @@ public class BaseUserServiceImpl extends BaseServiceImpl<BaseUserMapper, SysUser
return securityEntity; return securityEntity;
} }
@Override
public Boolean logout(HttpServletRequest request) {
try {
String token = request.getHeader(com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants.AUTHORIZATION_HEADER);
if (StringUtils.isNotBlank(token)) {
token = token.replaceAll("Bearer ", "");
// 更新数据库中的token状态为失效
List<BaseUserToken> tokenList = baseUserTokenService.list(
new LambdaQueryWrapper<BaseUserToken>()
.eq(BaseUserToken::getToken, token)
.eq(BaseUserToken::getState, Constants.USER_TOKEN_STATUS_E));
if (tokenList != null && !tokenList.isEmpty()) {
BaseUserToken userToken = tokenList.get(0);
userToken.setState(0); // 设置为失效状态
boolean updateResult = baseUserTokenService.updateById(userToken);
if (updateResult&&userinfoRedisTemplate.hasKey(REDIS_USER_KEY + token)) {
// 从Redis中移除token
userinfoRedisTemplate.delete(REDIS_USER_KEY + token);
//spring 安全删除用户信息
SecurityContextHolder.clearContext();
return true;
}
}
}
return false;
} catch (Exception e) {
log.error("登出异常:{}", e);
return false;
}
}
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
// String rsa = "ObMojRm4G31O91lJDyV7rT7fmkJ0x/tMz+t2gZa1M5RtZm6cTiaAT6eblAQzjuMbNNU6DoD/YloITzn2jnQH4g2nMj1Y8TXdSEK/q8QSoLb8QVb26SuMt1xuv1hklU0yzkqCtGW7GnRArMMlgQjh04GwAcj6TikEFjKvEGGETm4="; // String rsa = "ObMojRm4G31O91lJDyV7rT7fmkJ0x/tMz+t2gZa1M5RtZm6cTiaAT6eblAQzjuMbNNU6DoD/YloITzn2jnQH4g2nMj1Y8TXdSEK/q8QSoLb8QVb26SuMt1xuv1hklU0yzkqCtGW7GnRArMMlgQjh04GwAcj6TikEFjKvEGGETm4=";
// String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCThndxa2d5wd1XgZw/OoRHyqqhEKn2Vj8esINcPHRDKz/eDxrHT874ssYfRdkQPU4d13yLhywu30D0J/IusB1Aay0Kl7fszYztP1Yg7Y8Gmiwynj4bFooIFZk5l0wJdxciXA4FgjK+oD4Un/LhP20k5OSQ+QLMDBHBJTD/uk9cxQIDAQAB"; // String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCThndxa2d5wd1XgZw/OoRHyqqhEKn2Vj8esINcPHRDKz/eDxrHT874ssYfRdkQPU4d13yLhywu30D0J/IusB1Aay0Kl7fszYztP1Yg7Y8Gmiwynj4bFooIFZk5l0wJdxciXA4FgjK+oD4Un/LhP20k5OSQ+QLMDBHBJTD/uk9cxQIDAQAB";

View File

@ -39,4 +39,6 @@ public interface SysOrgService extends IBaseService<SysOrg>{
* @return * @return
*/ */
Boolean deleteById(String orgId); Boolean deleteById(String orgId);
SysOrg getCompanyByOrgId(String orgId);
} }

View File

@ -29,17 +29,17 @@ import java.util.stream.Collectors;
/** /**
* 对数据表 sys_org 操作的 serviceImpl * 对数据表 sys_org 操作的 serviceImpl
* @author yss
* *
* @author yss
*/ */
@Service @Service
public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> implements SysOrgService { public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper, SysOrg> implements SysOrgService {
@Override @Override
public IPage<SysOrg> getPage(SysOrgVO SysOrgVO) { public IPage<SysOrg> getPage(SysOrgVO SysOrgVO) {
LambdaQueryWrapper<SysOrg> query = buildQueryWrapper(SysOrgVO); LambdaQueryWrapper<SysOrg> query = buildQueryWrapper(SysOrgVO);
if(null == SysOrgVO.getBasePageRequest()){ if (null == SysOrgVO.getBasePageRequest()) {
SysOrgVO.setBasePageRequest(new BasePageRequest()); SysOrgVO.setBasePageRequest(new BasePageRequest());
} }
//查询 //查询
@ -52,7 +52,7 @@ public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> imp
public List<SysOrgVO> getTreeByNode(SysOrg org) { public List<SysOrgVO> getTreeByNode(SysOrg org) {
SysOrgVO sysOrgVO = new SysOrgVO(); SysOrgVO sysOrgVO = new SysOrgVO();
List<SysOrg> sysOrgList = new ArrayList<>(); List<SysOrg> sysOrgList = new ArrayList<>();
if (!StringUtils.isEmpty(org.getOrgName()) || !StringUtils.isEmpty(org.getOrgNum())){ if (!StringUtils.isEmpty(org.getOrgName()) || !StringUtils.isEmpty(org.getOrgNum())) {
SysOrgVO vo = BeanUtil.toBean(org, SysOrgVO.class); SysOrgVO vo = BeanUtil.toBean(org, SysOrgVO.class);
IPage<SysOrg> page = this.getPage(vo); IPage<SysOrg> page = this.getPage(vo);
sysOrgList = page.getRecords(); sysOrgList = page.getRecords();
@ -91,13 +91,13 @@ public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> imp
vo.setOrgId(PropertyUtils.getSnowflakeId()).setCreateDate(LocalDateTime.now()); vo.setOrgId(PropertyUtils.getSnowflakeId()).setCreateDate(LocalDateTime.now());
SysOrg full = this.buildOrgFullPath(vo); SysOrg full = this.buildOrgFullPath(vo);
vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName()); vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName());
validEntityBeforeSave(vo,false); validEntityBeforeSave(vo, false);
return baseMapper.insert(vo) > 0; return baseMapper.insert(vo) > 0;
} }
@Override @Override
public Boolean updateByVo(SysOrgVO vo) { public Boolean updateByVo(SysOrgVO vo) {
validEntityBeforeSave(vo,true); validEntityBeforeSave(vo, true);
SysOrg full = this.buildOrgFullPath(vo); SysOrg full = this.buildOrgFullPath(vo);
vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName()); vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName());
// 删除机构与人员关联 // 删除机构与人员关联
@ -116,8 +116,23 @@ public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> imp
return this.removeById(orgId); return this.removeById(orgId);
} }
@Override
public SysOrg getCompanyByOrgId(String orgId) {
LambdaQueryWrapper<SysOrg> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysOrg::getOrgId, orgId).eq(SysOrg::getDeleteFlag, "normal");
SysOrg currentOrg = baseMapper.selectOne(queryWrapper);
while ((currentOrg != null) && !currentOrg.getOrgCategory().equals("Org") && !CommonUtil.ROOT_NODE.equals(currentOrg.getOrgId())) {
queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysOrg::getOrgId, currentOrg.getUpOrgId())
.eq(SysOrg::getDeleteFlag, "normal");
currentOrg = baseMapper.selectOne(queryWrapper);
}
// @Override return currentOrg;
}
// @Override
public SysOrg buildOrgFullPath(SysOrg nowOrg) { public SysOrg buildOrgFullPath(SysOrg nowOrg) {
String upOrgId = StringUtils.isBlank(nowOrg.getUpOrgId()) ? CommonUtil.ROOT_NODE : nowOrg.getUpOrgId(); String upOrgId = StringUtils.isBlank(nowOrg.getUpOrgId()) ? CommonUtil.ROOT_NODE : nowOrg.getUpOrgId();
List<String> idPath = new ArrayList<>(); List<String> idPath = new ArrayList<>();
@ -148,15 +163,15 @@ public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> imp
/** /**
* 保存前的数据校验 * 保存前的数据校验
*/ */
private void validEntityBeforeSave(SysOrg entity, boolean isUpdate){ private void validEntityBeforeSave(SysOrg entity, boolean isUpdate) {
//校验角色编码是否重复 //校验角色编码是否重复
LambdaQueryWrapper<SysOrg> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysOrg> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(entity.getOrgNum()), SysOrg::getOrgNum, entity.getOrgNum()); lqw.eq(StringUtils.isNotBlank(entity.getOrgNum()), SysOrg::getOrgNum, entity.getOrgNum());
if (isUpdate){ if (isUpdate) {
lqw.ne(StringUtils.isNotBlank(entity.getOrgId()), SysOrg::getOrgId, entity.getOrgId()); lqw.ne(StringUtils.isNotBlank(entity.getOrgId()), SysOrg::getOrgId, entity.getOrgId());
} }
List<SysOrg> orgList =baseMapper.selectList(lqw); List<SysOrg> orgList = baseMapper.selectList(lqw);
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("组织编码已存在",orgList.size()>1); CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("组织编码已存在", orgList.size() > 1);
} }
private SysOrgVO setInfoForTree(SysOrgVO orgVO) { private SysOrgVO setInfoForTree(SysOrgVO orgVO) {
@ -165,6 +180,7 @@ public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> imp
.setKey(orgVO.getOrgId()) .setKey(orgVO.getOrgId())
.setValue(orgVO.getOrgId()); .setValue(orgVO.getOrgId());
} }
/** /**
* 递归查询部门信息树形展示 * 递归查询部门信息树形展示
* *
@ -199,7 +215,7 @@ public class SysOrgServiceImpl extends BaseServiceImpl<SysOrgMapper,SysOrg> imp
private LambdaQueryWrapper<SysOrg> buildQueryWrapper(SysOrgVO vo) { private LambdaQueryWrapper<SysOrg> buildQueryWrapper(SysOrgVO vo) {
LambdaQueryWrapper<SysOrg> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<SysOrg> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(vo.getOrgName()), SysOrg::getOrgName , vo.getOrgName()); lqw.like(StringUtils.isNotBlank(vo.getOrgName()), SysOrg::getOrgName, vo.getOrgName());
lqw.eq(StringUtils.isNotBlank(vo.getOrgNum()), SysOrg::getOrgNum, vo.getOrgNum()); lqw.eq(StringUtils.isNotBlank(vo.getOrgNum()), SysOrg::getOrgNum, vo.getOrgNum());
lqw.like(StringUtils.isNotBlank(vo.getOrgFullId()), SysOrg::getOrgFullId, vo.getOrgFullId()); lqw.like(StringUtils.isNotBlank(vo.getOrgFullId()), SysOrg::getOrgFullId, vo.getOrgFullId());
lqw.like(StringUtils.isNotBlank(vo.getOrgFullName()), SysOrg::getOrgFullName, vo.getOrgFullName()); lqw.like(StringUtils.isNotBlank(vo.getOrgFullName()), SysOrg::getOrgFullName, vo.getOrgFullName());