|
@ -7,6 +7,7 @@ import jakarta.servlet.FilterChain; |
|
|
import jakarta.servlet.ServletException; |
|
|
import jakarta.servlet.ServletException; |
|
|
import jakarta.servlet.http.HttpServletRequest; |
|
|
import jakarta.servlet.http.HttpServletRequest; |
|
|
import jakarta.servlet.http.HttpServletResponse; |
|
|
import jakarta.servlet.http.HttpServletResponse; |
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.springframework.stereotype.Component; |
|
|
import org.springframework.web.filter.OncePerRequestFilter; |
|
|
import org.springframework.web.filter.OncePerRequestFilter; |
|
|
|
|
|
|
|
@ -15,18 +16,23 @@ import java.io.IOException; |
|
|
@Component |
|
|
@Component |
|
|
public class JwtAuthenticationFilter extends OncePerRequestFilter { |
|
|
public class JwtAuthenticationFilter extends OncePerRequestFilter { |
|
|
|
|
|
|
|
|
|
|
|
@Value("${jwt.enabled:true}") // 从配置文件中读取 jwt.enabled,默认为 true |
|
|
|
|
|
private boolean jwtEnabled; |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { |
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { |
|
|
String token = getTokenFromRequest(request); |
|
|
|
|
|
if (shouldBypass(request)) { |
|
|
|
|
|
filterChain.doFilter(request, response); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
if (token != null && JwtUtil.parseJWE(token) != null) { |
|
|
|
|
|
request.setAttribute("token", token); // 可以将 token 存储在 request 属性中,供后续使用 |
|
|
|
|
|
} else { |
|
|
|
|
|
ResponseUtils.writeErrMsg(response, ResultCode.ACCESS_TOKEN_INVALID); |
|
|
|
|
|
return; |
|
|
|
|
|
|
|
|
if(jwtEnabled){ |
|
|
|
|
|
String token = getTokenFromRequest(request); |
|
|
|
|
|
if (shouldBypass(request)) { |
|
|
|
|
|
filterChain.doFilter(request, response); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
if (token != null && JwtUtil.parseJWE(token) != null) { |
|
|
|
|
|
request.setAttribute("token", token); // 可以将 token 存储在 request 属性中,供后续使用 |
|
|
|
|
|
} else { |
|
|
|
|
|
ResponseUtils.writeErrMsg(response, ResultCode.ACCESS_TOKEN_INVALID); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
filterChain.doFilter(request, response); |
|
|
filterChain.doFilter(request, response); |
|
|
} |
|
|
} |
|
|