登录拦截器修改

This commit is contained in:
zk
2026-03-11 15:59:05 +08:00
parent 9a3b026ebc
commit 7248248b89
@@ -11,6 +11,7 @@ import java.util.stream.Collectors;
import javax.servlet.FilterChain; import javax.servlet.FilterChain;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -46,13 +47,9 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
/** /**
* 加密密钥 * 加密密钥
*/ */
@Value("${app.secret.token:sh.0807.}") @Value("${app.secret.token:youweiqingnian123}")
private String secret; private String secret;
/**
* 在线设备数量
*/
@Value("${app.login.device_online_quantity:5}")
private int deviceOnlineQuantity;
/** /**
* token过期时间 * token过期时间
*/ */
@@ -74,8 +71,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
private RedisServerTool redisServerTool; private RedisServerTool redisServerTool;
@Override @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
throws ServletException, IOException {
// 忽略接口放行 // 忽略接口放行
if (ifCurrentUrl(ignoreUrls, request.getRequestURI())) { if (ifCurrentUrl(ignoreUrls, request.getRequestURI())) {
@@ -83,8 +79,23 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
return; return;
} }
// 获取token // 获取token:优先从cookie获取,不存在则从请求头获取
String token = request.getHeader("Token"); String token = null;
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
if ("Token".equals(cookie.getName())) {
token = cookie.getValue();
break;
}
}
}
if (!StringUtils.hasText(token)) {
token = request.getHeader("Token");
}
if (!StringUtils.hasText(token)) { if (!StringUtils.hasText(token)) {
// 放行 // 放行
filterChain.doFilter(request, response); filterChain.doFilter(request, response);
@@ -109,8 +120,10 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
// 获取登录设备信息 // 获取登录设备信息
List<RedisLoginTokenInfo.LoginDevice> devices = info.getLoginDevices(); List<RedisLoginTokenInfo.LoginDevice> devices = info.getLoginDevices();
// 过滤过期 // 过滤过期
devices = devices.stream().filter(v -> v.getLastLoginTime().isBefore(new Date(System.currentTimeMillis() + tokenExceedTime * 1000L).toInstant())).collect(Collectors.toList()); devices = devices.stream().filter(v -> v.getLastLoginTime().isBefore(new Date(System.currentTimeMillis() + tokenExceedTime * 1000L).toInstant())).collect(Collectors.toList());
Map<String, RedisLoginTokenInfo.LoginDevice> map = devices.stream().collect(Collectors.toMap(RedisLoginTokenInfo.LoginDevice::getUuId, v -> v)); Map<String, RedisLoginTokenInfo.LoginDevice> map = devices.stream().collect(Collectors.toMap(RedisLoginTokenInfo.LoginDevice::getUuId, v -> v));
Assert.isTrue(map.containsKey(uuId), "登录过期"); Assert.isTrue(map.containsKey(uuId), "登录过期");
@@ -124,6 +137,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
new UsernamePasswordAuthenticationToken(info.getUserId(), info, new UsernamePasswordAuthenticationToken(info.getUserId(), info,
info.getAuthority().stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList())); info.getAuthority().stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList()));
authenticationToken.setDetails(info); authenticationToken.setDetails(info);
SecurityContextHolder.getContext().setAuthentication(authenticationToken); SecurityContextHolder.getContext().setAuthentication(authenticationToken);
MDC.put("userId", userId.toString()); MDC.put("userId", userId.toString());