Response header nachträglich modifizieren

derHarri

Neues Mitglied
Hallo,

ich arbeite an einer Spring boot Anwendung.
( spring boot v 2.1.3, läuft in eine wildfly v18 )

Ich versuche dem erzeugten Set-Cookie response header zusätzliche Attribute zu ergänzen.
In dem Zuge habe ich einen Filter erzeugt. In der doFilter methode versuche ich nach dem Aufruf von chain.doFilter den verfügbaren Set-Cookie header zu erweitern.
Der dazugehörige Wert soll um "SameSite=None; Secure" erweitert werden.

[CODE lang="java" title="Filter"]@Slf4j
public class SameSiteFilter extends GenericFilterBean {

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {

HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;

log.debug("SameSiteFilter::doFilter called");

addSameSiteAttribute(httpResponse); // Works more or less
chain.doFilter(request, response);
// addSameSiteAttribute(httpResponse); // Response modification not visible
}

private void addSameSiteAttribute(HttpServletResponse response) {
log.debug("=== addSameSiteAttribute");
httpLog("before", response);

Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE);
// boolean firstHeader = true;
for (String header : headers) {
response.setHeader(HttpHeaders.SET_COOKIE,
String.format("%s; %s", header, "SameSite=None; Secure"));
}

response.addHeader("MeinNameIst", "Hase");

httpLog("after", response);
}[/CODE]

[CODE lang="java" title="Filter Konfiguration"]@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
String loginUrl = highpotsUrl + "?url=" + redirectUrl;
http
.addFilterAfter(new SameSiteFilter(), BasicAuthenticationFilter.class)
.headers().frameOptions().disable().and()
.authorizeRequests()
.antMatchers("/css/*").permitAll()
.antMatchers("/js/*").permitAll()
.antMatchers("/documents/*").permitAll()
.antMatchers("/security/login").permitAll()
.antMatchers("/iframe/show").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.formLogin()
.loginPage(loginUrl).permitAll()
.and()
.logout().logoutSuccessUrl(loginUrl);
}
}[/CODE]

Ich sehe zwar den modifizierten header im server log. ABER am client kommt as nicht an.
Gerade so als würde ich das Response Objekt nicht verändern sondern als würde ich mit einer Kopie arbeiten.

Evtl kann mir jemand sagen wo mein Denkfehler ist?
Vielleicht hat jemand auch einen anderen, besseren Lösungsansatz


Vielen Dank
Harri E
 

derHarri

Neues Mitglied
Hast du deinen Denkfehler inzwischen gefunden?
Leider nein.
Ich hab das Problem 'umgangen' indem ich eine neuere Wildfly Version verwende.
Hier kann man das Set-Cookie Verhalten konfigurieren:
Datei: webapp/WEB-INF/undertow-handlers.conf
```
samesite-cookie(mode=None)
```

Aus Neugier wäre ich aber an einer programmatischen Lösung weiterhin interessiert
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben