From ab793c16a637fece00485a37c8e12f16d2ab3641 Mon Sep 17 00:00:00 2001 From: houjishuang <46269784@qq.com> Date: Fri, 20 Jun 2025 10:49:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E9=99=86=E4=BB=A3=E7=A0=81=E8=BF=81?= =?UTF-8?q?=E7=A7=BBjianquan=E6=8E=A5=E5=8F=A3=E9=89=B4=E6=9D=83dengchu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/controller/LoginController.java | 8 +++ .../ebtp/login/service/BaseUserService.java | 3 ++ .../service/impl/BaseUserServiceImpl.java | 51 +++++++++++++++++-- .../project/org/service/SysOrgService.java | 2 + .../org/service/impl/SysOrgServiceImpl.java | 46 +++++++++++------ 5 files changed, 92 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/chinaunicom/mall/ebtp/login/controller/LoginController.java b/src/main/java/com/chinaunicom/mall/ebtp/login/controller/LoginController.java index 19e5e59..6b2763e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/login/controller/LoginController.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/login/controller/LoginController.java @@ -61,5 +61,13 @@ public class LoginController { return BaseResponse.success(null); } } + @ApiOperation("登出") + @PostMapping("/logout") + public BaseResponse logout(HttpServletRequest request) { + + Boolean result = iBaseUserService.logout(request); + return BaseResponse.success(result); + + } } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/login/service/BaseUserService.java b/src/main/java/com/chinaunicom/mall/ebtp/login/service/BaseUserService.java index b7d5253..a74af8b 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/login/service/BaseUserService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/login/service/BaseUserService.java @@ -10,6 +10,7 @@ import com.chinaunicom.mall.ebtp.login.entity.BaseUserSelect; import com.chinaunicom.mall.ebtp.login.entity.BaseUserSelectVo; import com.coscoshipping.ebtp.project.user.entity.SysUser; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -26,4 +27,6 @@ public interface BaseUserService extends IBaseService { void setCookie(HttpServletResponse response, String name, String value); SecurityEntity bdCheckToken(String token); + + Boolean logout(HttpServletRequest request); } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java index a206196..7287a8a 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/login/service/impl/BaseUserServiceImpl.java @@ -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.impl.BaseServiceImpl; 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.dao.BaseUserMapper; import com.chinaunicom.mall.ebtp.login.entity.*; import com.chinaunicom.mall.ebtp.login.service.BaseUserService; 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 lombok.extern.slf4j.Slf4j; 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.Value; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -72,6 +75,8 @@ public class BaseUserServiceImpl extends BaseServiceImpl redisTemplate; @@ -243,8 +248,11 @@ public class BaseUserServiceImpl extends BaseServiceImpl authorityList =this.baseUserMapper.selectRoleByUserId(baseUser.getUserId());; securityEntity.setAuthorityList(authorityList); @@ -272,6 +280,43 @@ public class BaseUserServiceImpl extends BaseServiceImpl tokenList = baseUserTokenService.list( + new LambdaQueryWrapper() + .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 { // String rsa = "ObMojRm4G31O91lJDyV7rT7fmkJ0x/tMz+t2gZa1M5RtZm6cTiaAT6eblAQzjuMbNNU6DoD/YloITzn2jnQH4g2nMj1Y8TXdSEK/q8QSoLb8QVb26SuMt1xuv1hklU0yzkqCtGW7GnRArMMlgQjh04GwAcj6TikEFjKvEGGETm4="; // String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCThndxa2d5wd1XgZw/OoRHyqqhEKn2Vj8esINcPHRDKz/eDxrHT874ssYfRdkQPU4d13yLhywu30D0J/IusB1Aay0Kl7fszYztP1Yg7Y8Gmiwynj4bFooIFZk5l0wJdxciXA4FgjK+oD4Un/LhP20k5OSQ+QLMDBHBJTD/uk9cxQIDAQAB"; diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/service/SysOrgService.java b/src/main/java/com/coscoshipping/ebtp/project/org/service/SysOrgService.java index 60faf83..81c642a 100644 --- a/src/main/java/com/coscoshipping/ebtp/project/org/service/SysOrgService.java +++ b/src/main/java/com/coscoshipping/ebtp/project/org/service/SysOrgService.java @@ -39,4 +39,6 @@ public interface SysOrgService extends IBaseService{ * @return */ Boolean deleteById(String orgId); + + SysOrg getCompanyByOrgId(String orgId); } diff --git a/src/main/java/com/coscoshipping/ebtp/project/org/service/impl/SysOrgServiceImpl.java b/src/main/java/com/coscoshipping/ebtp/project/org/service/impl/SysOrgServiceImpl.java index 76ee3b0..4abffa1 100644 --- a/src/main/java/com/coscoshipping/ebtp/project/org/service/impl/SysOrgServiceImpl.java +++ b/src/main/java/com/coscoshipping/ebtp/project/org/service/impl/SysOrgServiceImpl.java @@ -29,17 +29,17 @@ import java.util.stream.Collectors; /** * 对数据表 sys_org 操作的 serviceImpl - * @author yss * + * @author yss */ @Service -public class SysOrgServiceImpl extends BaseServiceImpl implements SysOrgService { +public class SysOrgServiceImpl extends BaseServiceImpl implements SysOrgService { @Override public IPage getPage(SysOrgVO SysOrgVO) { LambdaQueryWrapper query = buildQueryWrapper(SysOrgVO); - if(null == SysOrgVO.getBasePageRequest()){ + if (null == SysOrgVO.getBasePageRequest()) { SysOrgVO.setBasePageRequest(new BasePageRequest()); } //查询 @@ -52,7 +52,7 @@ public class SysOrgServiceImpl extends BaseServiceImpl imp public List getTreeByNode(SysOrg org) { SysOrgVO sysOrgVO = new SysOrgVO(); List 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); IPage page = this.getPage(vo); sysOrgList = page.getRecords(); @@ -89,16 +89,16 @@ public class SysOrgServiceImpl extends BaseServiceImpl imp @Override public Boolean insertByVo(SysOrgVO vo) { vo.setOrgId(PropertyUtils.getSnowflakeId()).setCreateDate(LocalDateTime.now()); - SysOrg full = this.buildOrgFullPath(vo); + SysOrg full = this.buildOrgFullPath(vo); vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName()); - validEntityBeforeSave(vo,false); + validEntityBeforeSave(vo, false); return baseMapper.insert(vo) > 0; } @Override public Boolean updateByVo(SysOrgVO vo) { - validEntityBeforeSave(vo,true); - SysOrg full = this.buildOrgFullPath(vo); + validEntityBeforeSave(vo, true); + SysOrg full = this.buildOrgFullPath(vo); vo.setOrgFullId(full.getOrgFullId()).setOrgFullName(full.getOrgFullName()); // 删除机构与人员关联 // roleMenuService.remove(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, vo.getRoleId())); @@ -116,8 +116,23 @@ public class SysOrgServiceImpl extends BaseServiceImpl imp return this.removeById(orgId); } + @Override + public SysOrg getCompanyByOrgId(String orgId) { + LambdaQueryWrapper 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) { String upOrgId = StringUtils.isBlank(nowOrg.getUpOrgId()) ? CommonUtil.ROOT_NODE : nowOrg.getUpOrgId(); List idPath = new ArrayList<>(); @@ -129,7 +144,7 @@ public class SysOrgServiceImpl extends BaseServiceImpl imp idPath.add(0, currentOrg.getOrgId()); namePath.add(0, currentOrg.getOrgName()); - if (StringUtils.isBlank(currentOrg.getUpOrgId()) || currentOrg.getUpOrgId().equals(CommonUtil.ROOT_NODE)) { + if (StringUtils.isBlank(currentOrg.getUpOrgId()) || currentOrg.getUpOrgId().equals(CommonUtil.ROOT_NODE)) { break; } @@ -148,15 +163,15 @@ public class SysOrgServiceImpl extends BaseServiceImpl imp /** * 保存前的数据校验 */ - private void validEntityBeforeSave(SysOrg entity, boolean isUpdate){ + private void validEntityBeforeSave(SysOrg entity, boolean isUpdate) { //校验角色编码是否重复 LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(entity.getOrgNum()), SysOrg::getOrgNum, entity.getOrgNum()); - if (isUpdate){ + if (isUpdate) { lqw.ne(StringUtils.isNotBlank(entity.getOrgId()), SysOrg::getOrgId, entity.getOrgId()); } - List orgList =baseMapper.selectList(lqw); - CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("组织编码已存在",orgList.size()>1); + List orgList = baseMapper.selectList(lqw); + CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.customValidName("组织编码已存在", orgList.size() > 1); } private SysOrgVO setInfoForTree(SysOrgVO orgVO) { @@ -165,6 +180,7 @@ public class SysOrgServiceImpl extends BaseServiceImpl imp .setKey(orgVO.getOrgId()) .setValue(orgVO.getOrgId()); } + /** * 递归查询部门信息树形展示 * @@ -199,7 +215,7 @@ public class SysOrgServiceImpl extends BaseServiceImpl imp private LambdaQueryWrapper buildQueryWrapper(SysOrgVO vo) { LambdaQueryWrapper 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.like(StringUtils.isNotBlank(vo.getOrgFullId()), SysOrg::getOrgFullId, vo.getOrgFullId()); lqw.like(StringUtils.isNotBlank(vo.getOrgFullName()), SysOrg::getOrgFullName, vo.getOrgFullName());