feat: 从 Cookie 中获取 AccessToken
This commit is contained in:
@@ -8,6 +8,7 @@ import com.onixbyte.helix.security.authentication.UsernamePasswordAuthentication
|
|||||||
import com.onixbyte.helix.shared.TokenConstant;
|
import com.onixbyte.helix.shared.TokenConstant;
|
||||||
import jakarta.servlet.FilterChain;
|
import jakarta.servlet.FilterChain;
|
||||||
import jakarta.servlet.ServletException;
|
import jakarta.servlet.ServletException;
|
||||||
|
import jakarta.servlet.http.Cookie;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.jspecify.annotations.NonNull;
|
import org.jspecify.annotations.NonNull;
|
||||||
@@ -17,9 +18,11 @@ import org.springframework.security.core.GrantedAuthority;
|
|||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.filter.OncePerRequestFilter;
|
import org.springframework.web.filter.OncePerRequestFilter;
|
||||||
|
import org.springframework.web.util.WebUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
||||||
@@ -46,18 +49,14 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
|
|||||||
@NonNull HttpServletResponse response,
|
@NonNull HttpServletResponse response,
|
||||||
@NonNull FilterChain filterChain
|
@NonNull FilterChain filterChain
|
||||||
) throws ServletException, IOException {
|
) throws ServletException, IOException {
|
||||||
var token = request.getHeader(TokenConstant.TOKEN_HEADER_NAME);
|
var token = Optional.ofNullable(WebUtils.getCookie(request, TokenConstant.TOKEN_NAME))
|
||||||
|
.map(Cookie::getValue)
|
||||||
|
.orElse(null);
|
||||||
if (Objects.isNull(token) || token.isBlank()) {
|
if (Objects.isNull(token) || token.isBlank()) {
|
||||||
filterChain.doFilter(request, response);
|
filterChain.doFilter(request, response);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!token.startsWith(TokenConstant.TOKEN_PREFIX)) {
|
|
||||||
filterChain.doFilter(request, response);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
token = token.substring(TokenConstant.TOKEN_PREFIX_LENGTH);
|
|
||||||
try {
|
try {
|
||||||
var decodedToken = tokenClient.verifyToken(token);
|
var decodedToken = tokenClient.verifyToken(token);
|
||||||
var username = decodedToken.getSubject();
|
var username = decodedToken.getSubject();
|
||||||
|
|||||||
Reference in New Issue
Block a user