chore: update
This commit is contained in:
+70
-5
@@ -1,13 +1,18 @@
|
||||
package com.drinkool.filters;
|
||||
|
||||
import com.drinkool.InternalValue;
|
||||
import jakarta.ws.rs.container.ContainerRequestContext;
|
||||
import jakarta.ws.rs.Priorities;
|
||||
import jakarta.ws.rs.container.*;
|
||||
import jakarta.ws.rs.core.*;
|
||||
import java.util.*;
|
||||
import org.jboss.resteasy.reactive.server.ServerRequestFilter;
|
||||
import org.jboss.resteasy.reactive.server.ServerResponseFilter;
|
||||
import org.jose4j.jws.AlgorithmIdentifiers;
|
||||
import org.jose4j.jws.JsonWebSignature;
|
||||
import org.jose4j.jwt.JwtClaims;
|
||||
import org.jose4j.jwt.consumer.JwtConsumer;
|
||||
import org.jose4j.jwt.consumer.JwtConsumerBuilder;
|
||||
import org.jose4j.keys.HmacKey;
|
||||
|
||||
public class InternalHeaderGatewayFilter {
|
||||
|
||||
@@ -21,12 +26,14 @@ public class InternalHeaderGatewayFilter {
|
||||
}
|
||||
|
||||
@ServerRequestFilter(preMatching = true)
|
||||
public void handleGatewayHeaders(ContainerRequestContext requestContext) {
|
||||
public void handleRequestHeaders(ContainerRequestContext requestContext) {
|
||||
requestContext
|
||||
.getHeaders()
|
||||
.keySet()
|
||||
.removeIf(key ->
|
||||
key.toLowerCase().startsWith(InternalValue.headerId.toLowerCase())
|
||||
.removeIf(
|
||||
key ->
|
||||
key.equalsIgnoreCase(InternalValue.headerId) ||
|
||||
key.toLowerCase().startsWith(InternalValue.headerId.toLowerCase())
|
||||
);
|
||||
|
||||
Map<String, Cookie> cookies = requestContext.getCookies();
|
||||
@@ -38,7 +45,8 @@ public class InternalHeaderGatewayFilter {
|
||||
String token = authCookie.getValue();
|
||||
|
||||
JwtConsumer jwtConsumer = new JwtConsumerBuilder()
|
||||
.setVerificationKey(new org.jose4j.keys.HmacKey(SECRET_KEY.getBytes()))
|
||||
.setRequireExpirationTime()
|
||||
.setVerificationKey(new HmacKey(SECRET_KEY.getBytes()))
|
||||
.build();
|
||||
|
||||
JwtClaims claims = jwtConsumer.processToClaims(token);
|
||||
@@ -60,4 +68,61 @@ public class InternalHeaderGatewayFilter {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ServerResponseFilter(priority = Priorities.USER + 100)
|
||||
public void handleResponseHeaders(ContainerResponseContext responseContext) {
|
||||
JwtClaims claims = new JwtClaims();
|
||||
boolean hasInternalData = false;
|
||||
|
||||
Map<String, List<Object>> headers = responseContext.getHeaders();
|
||||
Set<String> headerNames = new HashSet<>(
|
||||
responseContext.getHeaders().keySet()
|
||||
);
|
||||
|
||||
for (String key : headerNames) {
|
||||
if (key.toLowerCase().startsWith(InternalValue.headerId.toLowerCase())) {
|
||||
Object value = headers.get(key).get(0);
|
||||
|
||||
String claimKey = key.substring(InternalValue.headerId.length());
|
||||
claims.setClaim(claimKey, value.toString());
|
||||
|
||||
hasInternalData = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasInternalData) {
|
||||
try {
|
||||
claims.setExpirationTimeMinutesInTheFuture(60);
|
||||
claims.setGeneratedJwtId();
|
||||
claims.setIssuedAtToNow();
|
||||
|
||||
JsonWebSignature jws = new JsonWebSignature();
|
||||
jws.setPayload(claims.toJson());
|
||||
jws.setKey(new HmacKey(SECRET_KEY.getBytes()));
|
||||
jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.HMAC_SHA256);
|
||||
|
||||
String jwt = jws.getCompactSerialization();
|
||||
|
||||
NewCookie jwtCookie = new NewCookie.Builder(InternalValue.cookieName)
|
||||
.value(jwt)
|
||||
.path("/")
|
||||
.httpOnly(true)
|
||||
.secure(true)
|
||||
.sameSite(NewCookie.SameSite.STRICT)
|
||||
.maxAge(3600)
|
||||
.build();
|
||||
|
||||
responseContext.getHeaders().add("Set-Cookie", jwtCookie);
|
||||
|
||||
responseContext
|
||||
.getHeaders()
|
||||
.keySet()
|
||||
.removeIf(key ->
|
||||
key.toLowerCase().startsWith(InternalValue.cookieName)
|
||||
);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user