本文介绍了如何为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启用相同站点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!