景区账号限制登录状态

This commit is contained in:
2025-07-16 15:01:40 +08:00
parent 0ecd9d5e20
commit eda2c75533
3 changed files with 27 additions and 5 deletions

View File

@@ -8,7 +8,10 @@ import com.ycwl.basic.constant.RequestConstant;
import com.ycwl.basic.exception.CheckTokenException; import com.ycwl.basic.exception.CheckTokenException;
import com.ycwl.basic.exception.MissTokenException; import com.ycwl.basic.exception.MissTokenException;
import com.ycwl.basic.exception.PermissionException; import com.ycwl.basic.exception.PermissionException;
import com.ycwl.basic.exception.TokenExpireException;
import com.ycwl.basic.mapper.ScenicAccountMapper;
import com.ycwl.basic.model.jwt.JwtInfo; import com.ycwl.basic.model.jwt.JwtInfo;
import com.ycwl.basic.model.pc.scenic.entity.ScenicAccountEntity;
import com.ycwl.basic.utils.JwtTokenUtil; import com.ycwl.basic.utils.JwtTokenUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -23,14 +26,21 @@ import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.List; import java.util.List;
import static com.ycwl.basic.constant.JwtRoleConstant.MERCHANT;
@Slf4j @Slf4j
@Component @Component
public class AuthInterceptor implements HandlerInterceptor { public class AuthInterceptor implements HandlerInterceptor {
@Autowired @Autowired
RedisTemplate redisTemplate; RedisTemplate redisTemplate;
@Autowired
private ScenicAccountMapper scenicAccountMapper;
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
@@ -68,10 +78,14 @@ public class AuthInterceptor implements HandlerInterceptor {
JwtInfo jwtInfo; JwtInfo jwtInfo;
try { try {
jwtInfo = JwtTokenUtil.parsingToken(token); jwtInfo = JwtTokenUtil.parsingToken(token);
// LocalDateTime expireTime = jwtInfo.getExpireTime(); if (StringUtils.equals(jwtInfo.getRoleId(), MERCHANT.type)) {
// if (LocalDateTime.now(ZoneId.systemDefault()).isAfter(expireTime)) { Long merchantId = jwtInfo.getUserId();
// throw new TokenExpireException("token过期"); ScenicAccountEntity account = scenicAccountMapper.findAccountById(merchantId.toString());
// } LocalDateTime expireTime = jwtInfo.getExpireTime();
if (account.getUpdateTime().toInstant().getEpochSecond() != expireTime.atZone(ZoneId.systemDefault()).toEpochSecond()) {
throw new TokenExpireException("token过期");
}
}
BaseContextHandler.setToken(token); BaseContextHandler.setToken(token);
BaseContextHandler.setName(jwtInfo.getName()); BaseContextHandler.setName(jwtInfo.getName());
BaseContextHandler.setUserId(String.valueOf(jwtInfo.getUserId())); BaseContextHandler.setUserId(String.valueOf(jwtInfo.getUserId()));

View File

@@ -99,7 +99,7 @@ public class AppScenicServiceImpl implements AppScenicService {
jwtInfo.setAccount(scenicAccount.getAccount()); jwtInfo.setAccount(scenicAccount.getAccount());
jwtInfo.setUserId(scenicAccount.getId()); jwtInfo.setUserId(scenicAccount.getId());
jwtInfo.setRoleId(MERCHANT.type); jwtInfo.setRoleId(MERCHANT.type);
String token = jwtTokenUtil.generateToken(jwtInfo); String token = jwtTokenUtil.generateToken(jwtInfo, scenicAccount.getUpdateTime());
ScenicLoginRespVO scenicLoginRespVO = new ScenicLoginRespVO(); ScenicLoginRespVO scenicLoginRespVO = new ScenicLoginRespVO();
BeanUtil.copyProperties(scenicAccount,scenicLoginRespVO); BeanUtil.copyProperties(scenicAccount,scenicLoginRespVO);

View File

@@ -13,6 +13,8 @@ import org.springframework.web.context.request.ServletRequestAttributes;
import jakarta.servlet.http.Cookie; import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@@ -53,6 +55,12 @@ public class JwtTokenUtil {
String token = JwtAnalysisUtil.generateToken(jwtInfo, bytes, expireTime); String token = JwtAnalysisUtil.generateToken(jwtInfo, bytes, expireTime);
return token; return token;
} }
public static String generateToken(JwtInfo jwtInfo, Date expireTime) throws Exception {
byte[] bytes = RsaKeyUtil.toBytes(PRI_KEY);
LocalDateTime dt = expireTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
String token = JwtAnalysisUtil.generateToken(jwtInfo, bytes, dt);
return token;
}
/** /**