java – 没有cookie的Spring安全会话

我正在尝试在不利用cookie的情况下管理Spring Security中的会话.原因是 – 我们的应用程序显示在来自另一个域的iframe中,我们需要在我们的应用程序中管理会话,and Safari restricts cross-domain cookie creation.(上下文:domainA.com在iframe中显示domainB.com.domainB.com正在设置JSESSIONID cookie以利用在domainB.com上,但由于用户的浏览器显示domainA.com – Safari限制domainB.com创建cookie).

我能想到的唯一方法(针对OWASP安全建议) – 将URL中的JSESSIONID作为GET参数包含在内.我不想这样做,但我想不出另一种选择.

所以这个问题都是关于:

>有没有更好的替代方案来解决这个问题?
>如果不是 – 我怎样才能通过Spring Security实现这一目标

回顾Spring的文档,使用enableSessionUrlRewriting应该允许这样做

所以我做到了这一点:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.ALWAYS)
            .enableSessionUrlRewriting(true)

这没有将JSESSIONID添加到URL,但现在应该允许它.然后我利用in this question找到的一些代码将“跟踪模式”设置为URL

@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {

   @Override
   public void onStartup(ServletContext servletContext) throws ServletException {
      super.onStartup(servletContext);

      servletContext
        .setSessionTrackingModes(
            Collections.singleton(SessionTrackingMode.URL)
      );

即使在此之后 – 应用程序仍然将JSESSIONID添加为cookie而不是URL.

有人可以帮助我指出正确的方向吗?

解决方法:

您是否看过使用HTTP标头而不是cookie的Spring Session: HttpSession & RestfulAPI.请参阅REST Sample中的REST示例项目.

上一篇:javascript-如何使用Liberty更改生成的JSESSIONID的长度?


下一篇:Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库