Browse Source

不携带token禁止登录/套餐过期登录校验

master
La123123 1 month ago
parent
commit
44266d1847
  1. 2
      im-platform/src/main/java/com/bx/implatform/controller/LoginController.java
  2. 63
      im-platform/src/main/java/com/bx/implatform/entity/ImAgent.java
  3. 9
      im-platform/src/main/java/com/bx/implatform/mapper/ImAgentMapper.java
  4. 14
      im-platform/src/main/java/com/bx/implatform/service/ImAgentService.java
  5. 38
      im-platform/src/main/java/com/bx/implatform/service/impl/ImAgentServiceImpl.java
  6. 33
      im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java
  7. 2
      im-web/vue.config.js

2
im-platform/src/main/java/com/bx/implatform/controller/LoginController.java

@ -29,7 +29,7 @@ public class LoginController {
} }
@PostMapping("/loginCustom") @PostMapping("/loginCustom")
@Operation(summary = "用户登录", description = "用户登录") @Operation(summary = "客服登录", description = "客服登录")
public Result<LoginVO> loginCustom(@Valid @RequestBody LoginDTO dto) { public Result<LoginVO> loginCustom(@Valid @RequestBody LoginDTO dto) {
LoginVO vo = userService.loginCustom(dto); LoginVO vo = userService.loginCustom(dto);
return ResultUtils.success(vo); return ResultUtils.success(vo);

63
im-platform/src/main/java/com/bx/implatform/entity/ImAgent.java

@ -0,0 +1,63 @@
package com.bx.implatform.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
@Data
@TableName("im_agent")
public class ImAgent {
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 管理端ID
*/
private Long sysId;
/**
* 代理用户名
*/
private String agentName;
/**
* 唯一token
*/
private String uniqueToken;
/**
* 备注
*/
private String remark;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新时间
*/
private Date updatedTime;
/**
* 当前使用套餐
*/
private Long packageId;
/**
* 套餐到期时间
*/
private Date packageExpireTime;
/**
* 客服人数上限
*/
private Long maxCustomer;
}

9
im-platform/src/main/java/com/bx/implatform/mapper/ImAgentMapper.java

@ -0,0 +1,9 @@
package com.bx.implatform.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bx.implatform.entity.ImAgent;
public interface ImAgentMapper extends BaseMapper<ImAgent> {
}

14
im-platform/src/main/java/com/bx/implatform/service/ImAgentService.java

@ -0,0 +1,14 @@
package com.bx.implatform.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bx.implatform.entity.ImAgent;
public interface ImAgentService extends IService<ImAgent> {
/**
* 检查指定代理的套餐是否过期
* @param uniqueToken 代理token用于标识需要检查的代理
* @return 如果套餐过期返回true否则返回false
*/
boolean isPackageExpire(String uniqueToken);
}

38
im-platform/src/main/java/com/bx/implatform/service/impl/ImAgentServiceImpl.java

@ -0,0 +1,38 @@
package com.bx.implatform.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bx.implatform.entity.ImAgent;
import com.bx.implatform.mapper.ImAgentMapper;
import com.bx.implatform.service.ImAgentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Date;
@Slf4j
@Service
@RequiredArgsConstructor
public class ImAgentServiceImpl extends ServiceImpl<ImAgentMapper, ImAgent> implements ImAgentService {
private final ImAgentMapper baseMapper;
@Override
public boolean isPackageExpire(String uniqueToken) {
LambdaQueryWrapper <ImAgent> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ImAgent::getUniqueToken, uniqueToken);
ImAgent imAgent = baseMapper.selectOne(queryWrapper);
Date expireTime = imAgent.getPackageExpireTime();
//未设置套餐
if(expireTime == null){
return true;
}
//过期
return expireTime.before(new Date());
}
}

33
im-platform/src/main/java/com/bx/implatform/service/impl/UserServiceImpl.java

@ -53,14 +53,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
private final IMClient imClient; private final IMClient imClient;
private final SensitiveFilterUtil sensitiveFilterUtil; private final SensitiveFilterUtil sensitiveFilterUtil;
private final PrivateMessageService privateMessageService; private final PrivateMessageService privateMessageService;
@Autowired
private UserLabelService userLabelService; private final UserGroupService userGroupService;
@Autowired
private UserGroupService UserGroupService; private final UserLabelService userLabelService;
private final UserGroupService userGroupService; // 注入 UserGroupService
// @Autowired private final ImAgentService imAgentService;
// private UserLabelService UserLabelService;
private final UserLabelService UserLabelService; // 注入 UserGroupService
// @Override // @Override
// public LoginVO login(LoginDTO dto) { // public LoginVO login(LoginDTO dto) {
@ -98,7 +96,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Override @Override
public LoginVO login(LoginDTO dto) { public LoginVO login(LoginDTO dto) {
log.info("【测试】前端传的uniqueToken:{}", dto.getUniqueToken()); log.info("【测试】前端传的uniqueToken:{}", dto.getUniqueToken());
// 生成游客唯一标识UUID
String uniqueToken = dto.getUniqueToken();
// 检查uniqueToken是否为空或已过期
if(ObjectUtil.isEmpty(uniqueToken) || imAgentService.isPackageExpire(uniqueToken)){
throw new GlobalException("标识异常");
}
// 生成游客唯一标识UUID,用于标识唯一游客
String guestUuid = UUID.randomUUID().toString(); String guestUuid = UUID.randomUUID().toString();
// 生成游客用户名,例如 guest_随机6位数字 // 生成游客用户名,例如 guest_随机6位数字
@ -190,6 +195,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
if (!passwordEncoder.matches(dto.getPassword(), user.getPassword())) { if (!passwordEncoder.matches(dto.getPassword(), user.getPassword())) {
throw new GlobalException(ResultCode.PASSWOR_ERROR); throw new GlobalException(ResultCode.PASSWOR_ERROR);
} }
//未设置套餐或套餐过期
if(imAgentService.isPackageExpire(user.getUniqueToken())) {
throw new GlobalException("套餐已过期");
}
// 生成token // 生成token
UserSession session = BeanUtils.copyProperties(user, UserSession.class); UserSession session = BeanUtils.copyProperties(user, UserSession.class);
session.setUserId(user.getId()); session.setUserId(user.getId());
@ -334,7 +345,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
} }
if (StringUtils.hasText(user.getGroupIds())) { if (StringUtils.hasText(user.getGroupIds())) {
List<String> groupNames = UserGroupService.getGroupNamesByIds(user.getGroupIds()); List<String> groupNames = userGroupService.getGroupNamesByIds(user.getGroupIds());
vo.setGroupNames(groupNames); vo.setGroupNames(groupNames);
} }
@ -384,7 +395,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
// 获取用户的分组信息并转换为VO // 获取用户的分组信息并转换为VO
String token = user.getUniqueToken(); String token = user.getUniqueToken();
if (StringUtils.hasText(token)) { if (StringUtils.hasText(token)) {
List<UserLabel> label = UserLabelService.getLabelList(token); List<UserLabel> label = userLabelService.getLabelList(token);
// 转换为UserGroupVO // 转换为UserGroupVO
List<UserLabelVO> labelVOList = label.stream() List<UserLabelVO> labelVOList = label.stream()

2
im-web/vue.config.js

@ -5,7 +5,7 @@ module.exports = {
devServer: { devServer: {
proxy: { proxy: {
'/api': { '/api': {
target: 'http://127.0.0.1:8889', target: 'http://127.0.0.1:8881',
changeOrigin: true, changeOrigin: true,
ws: false, ws: false,
pathRewrite: { pathRewrite: {

Loading…
Cancel
Save