小编Pha*_*s1c的帖子

没有cookie的Spring安全会话

我正在尝试在不利用cookie的情况下管理Spring Security中的会话.原因是 - 我们的应用程序显示在另一个域的iframe中,我们需要在我们的应用程序中管理会话,并且Safari限制跨域co​​okie的创建.(上下文: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)
Run Code Online (Sandbox Code Playgroud)

这没有将JSESSIONID添加到URL,但现在应该允许它.然后我利用此问题中的一些代码将"跟踪模式"设置为URL

@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {

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

      servletContext
        .setSessionTrackingModes(
            Collections.singleton(SessionTrackingMode.URL)
      );
Run Code Online (Sandbox Code Playgroud)

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

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

java iframe spring-security cross-domain jsessionid

22
推荐指数
2
解决办法
8755
查看次数

改变html id是一个好习惯吗?

在我的例子中,我有一个id为"foo1Closed"的div.当我点击"foo1Closed"时,我希望在div中更改许多元素(例如高度,宽度,颜色,可见性等).

我完成此操作的一种方法是为.css文件中的每个元素编写两种样式.例如,"foo1Closed"的一种样式和"foo1Opened"的一种样式.喜欢:

#foo1Closed {
   visibility:hidden;
}
#foo1Opened {
    visibility:visible;
}
Run Code Online (Sandbox Code Playgroud)

然后我使用JavaScript函数来更改这些ID,例如:

document.getElementById("foo1Opened").id = "foo1Closed";
Run Code Online (Sandbox Code Playgroud)

由于我不知道这种方法的潜在缺点,我希望有人可以回答,如果这是一种"好的"方式来实现这种交互性,或者我应该直接通过JavaScript修改样式,如下所示:

document.getElementById("foo1Opened").style.visibility = "hidden";
Run Code Online (Sandbox Code Playgroud)

显然,一个解决方案将有更多的CSS代码,一个将有更多的JavaScript代码.我不知道的是,哪一个更有效(就项目的性能和/或建模而言).

重新提出的问题:由于ID用于标识特定对象(意味着它们通常不应被更改),是否有不同的方法可以在不编辑ID的情况下实现此目的,而且还不依赖于通过JavaScript手动更改每个元素?

html javascript css

1
推荐指数
2
解决办法
133
查看次数