cookie启用相同站点

cookie启用相同站点

本文介绍了如何为jsessionid cookie启用相同站点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何为在wildfly上运行的Web应用程序启用相同站点。
已检查 standalone.xml ,但是在其中找不到合适的标记

 < servlet-container name = default> 
< session-cookie http-only = true secure = true />
< jsp-config />
< / servlet-container>


解决方案

到目前为止,Java Servlet 4.0规范还没有支持SameSite cookie属性。您可以打开 java类。


但是,有两种解决方法。您可以手动覆盖Set-Cookie属性。


第一种方法(使用Spring的AuthenticationSuccessHandler):

  import java.io.IOException; 
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

导入org.springframework.http.HttpHeaders;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;

公共类AuthenticationSuccessHandlerImpl实现AuthenticationSuccessHandler {

@Override
public void onAuthenticationSuccess(HttpServletRequest请求,HttpServletResponse响应,身份验证身份验证)引发IOException {
addSameSiteCookieAttribute(响应); //将SameSite = strict添加到Set-Cookie属性
response.sendRedirect( / hello); //成功后重定向到hello.html auth
}

私人无效addSameSiteCookieAttribute(HttpServletResponse response){
Collection< String>标头= response.getHeaders(HttpHeaders.SET_COOKIE);
boolean firstHeader = true;
for(String header:headers){//可以有多个Set-Cookie属性
if(firstHeader){
response.setHeader(HttpHeaders.SET_COOKIE,String.format(% s;%s,标题, SameSite = Strict));
firstHeader = false;
继续;
}
response.addHeader(HttpHeaders.SET_COOKIE,String.format(%s;%s,标头, SameSite = Strict)));
}
}
}

第二种方法(使用javax.servlet.Filter ):

  import java.io.IOException; 
import java.util.Collection;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;

导入org.springframework.http.HttpHeaders;

公共类SameSiteFilter实现javax.servlet.Filter {
@Override
public void init(FilterConfig filterConfig)抛出ServletException {

}

@Override
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)引发IOException,ServletException {
chain.doFilter(request,response);
addSameSiteCookieAttribute((HttpServletResponse)response); //添加SameSite = strict cookie属性
}

私有无效addSameSiteCookieAttribute(HttpServletResponse response){
Collection< String>标头= response.getHeaders(HttpHeaders.SET_COOKIE);
boolean firstHeader = true;
for(String header:headers){//可以有多个Set-Cookie属性
if(firstHeader){
response.setHeader(HttpHeaders.SET_COOKIE,String.format(% s;%s,标题, SameSite = Strict));
firstHeader = false;
继续;
}
response.addHeader(HttpHeaders.SET_COOKIE,String.format(%s;%s,标头, SameSite = Strict)));
}
}

@Override
public void destroy(){

}
}

您可以查看,有关org.springframework.security.web.authentication.AuthenticationSuccessHandler或javax.servlet.Filter的配置的更多详细信息。


WebSecurityConfig 包含所有必需的配置。

这篇关于如何为jsessionid cookie启用相同站点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-31 22:02