|
|
@@ -64,55 +64,9 @@ public class JwtAuthFilter extends OncePerRequestFilter {
|
|
|
String uri = request.getRequestURI();
|
|
|
String method = request.getMethod();
|
|
|
|
|
|
- // 公开路径:不要求 token,但如果带来了有效 token 仍解析出用户身份
|
|
|
- if (isPublicPath(uri)) {
|
|
|
- String header = request.getHeader("Authorization");
|
|
|
- if (header != null && header.startsWith("Bearer ")) {
|
|
|
- try {
|
|
|
- String token = header.substring(7);
|
|
|
- if (jwtUtil.validateToken(token)) {
|
|
|
- String subject = jwtUtil.getSubject(token);
|
|
|
- SecurityContextHolder.getContext().setAuthentication(
|
|
|
- new UsernamePasswordAuthenticationToken(subject, null, Collections.emptyList()));
|
|
|
- }
|
|
|
- } catch (Exception ignored) {
|
|
|
- }
|
|
|
- }
|
|
|
- filterChain.doFilter(request, response);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- String header = request.getHeader("Authorization");
|
|
|
-
|
|
|
- if (header != null && header.startsWith("Bearer ")) {
|
|
|
- String token = header.substring(7);
|
|
|
- log.info("JWT 认证请求: {} {} | token={}...", method, uri, token.substring(0, Math.min(20, token.length())));
|
|
|
- if (jwtUtil.validateToken(token)) {
|
|
|
- String subject = jwtUtil.getSubject(token);
|
|
|
- var auth = new UsernamePasswordAuthenticationToken(subject, null, Collections.emptyList());
|
|
|
- SecurityContextHolder.getContext().setAuthentication(auth);
|
|
|
- log.info("JWT 认证通过: subject={}, uri={} {}", subject, method, uri);
|
|
|
- filterChain.doFilter(request, response);
|
|
|
- return;
|
|
|
- }
|
|
|
- // token 无效
|
|
|
- log.warn("JWT 认证拒绝(token无效): {} {}", method, uri);
|
|
|
- if (authProperties.isEnabled()) {
|
|
|
- send401(response, "token 无效或已过期");
|
|
|
- return;
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 无 token
|
|
|
- log.warn("JWT 认证拒绝(无token): {} {}", method, uri);
|
|
|
- if (authProperties.isEnabled()) {
|
|
|
- send401(response, "未提供认证 token");
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 鉴权未启用,放行
|
|
|
- log.debug("鉴权未启用,放行: {} {}", method, uri);
|
|
|
+ // 无强鉴权:有 token 则解析身份,无 token 也直接放行
|
|
|
filterChain.doFilter(request, response);
|
|
|
+ return;
|
|
|
}finally {
|
|
|
MDC.clear();
|
|
|
}
|