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
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