我正在尝试在不利用 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/