Skip to content

Commit 9bc8742

Browse files
committed
CSRF Filter update - client web
1 parent e730a6d commit 9bc8742

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/main/java/fr/github/vera/filters/CsrfFilter.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public class CsrfFilter implements ContainerRequestFilter, ContainerResponseFilt
2626
private static final Logger logger = LogManager.getLogger(CsrfFilter.class);
2727
private static final String CSRF_TOKEN_HEADER = "x-csrf-token";
2828
private static final String CSRF_COOKIE_NAME = "XSRF-TOKEN";
29+
private static final String CLIENT_TYPE_HEADER = "X-Client-Type";
30+
private static final String WEB_CLIENT = "web";
2931
private static final String IS_PUBLIC_PROPERTY = "isPublic";
3032

3133
// Stockage en mémoire (session utilisateur -> token)
@@ -45,6 +47,11 @@ public void filter(ContainerRequestContext requestContext) throws IOException {
4547
return;
4648
}
4749

50+
if (!isWebClient(requestContext)) {
51+
logger.debug("Client non-web détecté - skip CSRF pour: {} {}", method, path);
52+
return;
53+
}
54+
4855
// Récupérer la session utilisateur
4956
String sessionId = getSessionId(requestContext);
5057
if (sessionId == null) {
@@ -72,7 +79,7 @@ public void filter(ContainerRequestContext requestContext,
7279
String sessionId = getSessionId(requestContext);
7380

7481
// Pour les requêtes GET, générer un nouveau token si besoin
75-
if ("GET".equals(requestContext.getMethod()) && sessionId != null) {
82+
if ("GET".equals(requestContext.getMethod()) && sessionId != null && isWebClient(requestContext)) {
7683
String token = generateToken();
7784
tokenStore.put(sessionId, token);
7885
responseContext.getHeaders().add(CSRF_TOKEN_HEADER, token);
@@ -89,6 +96,11 @@ public boolean isPublic(ContainerRequestContext requestContext) {
8996
return Boolean.TRUE.equals(property) || "true".equals(property.toString());
9097
}
9198

99+
private boolean isWebClient(ContainerRequestContext requestContext) {
100+
String clientType = requestContext.getHeaderString(CLIENT_TYPE_HEADER);
101+
return WEB_CLIENT.equalsIgnoreCase(clientType);
102+
}
103+
92104
/**
93105
* Supprime l'ancien cookie XSRF-TOKEN non sécurisé
94106
*/
@@ -98,7 +110,7 @@ private void clearInsecureCookie(ContainerResponseContext responseContext) {
98110
.path("/")
99111
.maxAge(0) // Expire immédiatement
100112
.build();
101-
responseContext.getHeaders().add("Set-Cookie", deleteCookie.toString());
113+
responseContext.getHeaders().add("Set-Cookie", deleteCookie);
102114
}
103115

104116
private String getSessionId(ContainerRequestContext request) {
@@ -108,12 +120,9 @@ private String getSessionId(ContainerRequestContext request) {
108120
return sessionCookie.getValue();
109121
}
110122

111-
// Ou depuis le header Authorization si tu utilises JWT
112123
String authHeader = request.getHeaderString("Authorization");
113124
if (authHeader != null && authHeader.startsWith("Bearer ")) {
114-
// Pour JWT, utiliser le token complet ou un hash
115125
String jwtToken = authHeader.substring(7);
116-
// Hash le JWT pour avoir un ID de session plus court
117126
return Integer.toHexString(jwtToken.hashCode());
118127
}
119128

0 commit comments

Comments
 (0)