java - 没有 cookie 的 Spring Security session

标签 java iframe spring-security cross-domain jsessionid

我正在尝试在不利用 cookie 的情况下管理 Spring Security 中的 session 。原因是 - 我们的应用程序显示在来自另一个域的 iframe 中,我们需要在我们的应用程序中管理 session ,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 安全建议) - 是将 JSESSIONID 作为 GET 参数包含在 URL 中。我不想这样做,但我想不出替代方案。

所以这个问题是关于:

  • 有没有更好的方法来解决这个问题?
  • 如果没有 - 我如何使用 Spring Security 实现这一目标

使用 enableSessionUrlRewriting 查看 Spring 的文档应该允许这个

所以我已经这样做了:

@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 中。

有人能帮我指出正确的方向吗?

最佳答案

你看过Spring Session: HttpSession & RestfulAPI它使用 HTTP header 而不是 cookie。请参阅 REST Sample 中的 REST 示例项目.

关于java - 没有 cookie 的 Spring Security session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50691187/

相关文章:

java - 如何将其嵌入到我的网站中?

javascript - 在 React JSX 中使用 iframe 嵌入视频

css - iframe 内容不适合

java - 当我使用 ConcurrentSessionControlAuthenticationStrategy 而不是 ConcurrentSessionControlStrategy 时,sessionRegistry 为空

grails - session 固定-访问 session 中的值时出错

java - 解析 HTML - 仅获取表行的子集

java - WebView - 无法添加窗口 - token null 不适用于应用程序

spring-security - 多个@EnableGlobalMethodSecurity 注解

java - 从 JMS header 获取字符串值

javascript - 如何删除底部多余的 iframe 空间?