fix(report): 在SecurityRequestFilter中添加从cookie中获取token的逻辑

- 当请求头中不存在token时,尝试从cookie中获取token,增强安全性和兼容性。
This commit is contained in:
冷冷 committed 2025-03-09 21:34:35 +08:00
1 parent 2411399929
commit e73795310f
1 file changed
+17 -6
@@ -2,13 +2,18 @@ package com.pig4cloud.pigx.report.config;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.JakartaServletUtil;
import cn.hutool.http.ContentType;
import cn.hutool.json.JSONUtil;
import com.pig4cloud.pigx.admin.api.feign.RemoteTokenService;
import com.pig4cloud.pigx.common.core.constant.CommonConstants;
import com.pig4cloud.pigx.common.core.constant.SecurityConstants;
import com.pig4cloud.pigx.common.core.util.RetOps;
import io.springboot.plugin.goview.common.domain.AjaxResult;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@@ -20,14 +25,11 @@ import org.springframework.util.AntPathMatcher;
import org.springframework.util.PathMatcher;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
@@ -40,6 +42,7 @@ import java.util.Optional;
@Configuration(proxyBeanMethods = false)
public class SecurityRequestFilter extends OncePerRequestFilter {
public static final String TOKEN = "token";
private final PathMatcher pathMatcher = new AntPathMatcher();
private final RemoteTokenService remoteTokenService;
@@ -65,9 +68,17 @@ public class SecurityRequestFilter extends OncePerRequestFilter {
}
// 获取请求头中的token和tenantId参数
String accessToken = request.getHeader("token");
String accessToken = request.getHeader(TOKEN);
String tenantId = request.getHeader(CommonConstants.TENANT_ID);
if (StrUtil.isBlank(accessToken)) {
Map<String, Cookie> cookieMap = JakartaServletUtil.readCookieMap(request);
if (cookieMap.containsKey(TOKEN)) {
accessToken = cookieMap.get(TOKEN).getValue();
}
}
// 如果token参数不存在,返回错误信息
if (StrUtil.isBlank(accessToken)) {
sendErrorMsg(request, response);