我在www.someurl的控制器中注意到了什么。com是指第2步和第4步的会话id不同。看起来Spring Security创建了一个新会话,该会话现在已附加到请求公共页面。为什么会发生这种情况?我可以强制Spring Security使用现有会话吗?
您需要更改HttpSessionRequestCache的行为,以便在会话不存在时不会创建会话。
您可以通过在XML配置中创建其实例来实现这一点,如下所示:
<beans:bean id="httpSessionRequestCache" class="org.springframework.security.web.savedrequest.HttpSessionRequestCache">
<beans:property name="createSessionAllowed" value="false" />
</beans:bean>
然后,您需要在Spring Security配置中配置超文本传输协议元素以使用您的bean实例:
<http auto-config="true" ....>
<request-cache ref="httpSessionRequestCache"/>
... rest of your config
</http>
如果您使用的是JSP,还应该防止JSP创建会话。为了做到这一点,您需要在每个JSP(甚至是其他JSP中包含的JSP)的顶部添加一个页面指令。
<%@ page session="false" %>
你的诊断错了:
我在控制器中注意到www.someurl.com的是,步骤2和步骤4的会话ID不同。看起来Spring Security创建了一个新会话,并且该会话现在附加到公共页面的请求中。
正是因为所有页面都使用相同的会话,所以当您返回到第一个选项卡并刷新时,您仍然以管理员身份登录。给定浏览器的所有选项卡和框架共享给定webapp的相同会话。这就是它的工作原理。服务器不知道也不关心浏览器选项卡。它获取连接到给定浏览器发送的所有请求的会话cookie,并使用此cookie获取相应的会话。这实际上是一件好事。如果没有这一点,每次打开一个已经通过身份验证的新选项卡时,都必须再次进行身份验证。你肯定不想这样。
因此,让我们解释一下在您的场景中会发生什么:
编辑:看来我错了,Spring确实在登录后创建了一个新会话,以防止会话固定攻击。文档中提供了关于这一点有用的原因以及如何避免这种行为的解释:
会话固定攻击是一种潜在风险,恶意攻击者可能通过访问站点创建会话,然后说服其他用户使用同一会话登录(例如,通过向他们发送包含会话标识符的链接作为参数)。Spring Security通过在用户登录时创建新会话来自动防止这种情况。如果不需要此保护,或与其他要求冲突,则可以使用上的会话固定保护属性来控制行为,该属性有三个选项
>
migrateSession-创建新会话,并将现有会话属性复制到新会话。这是默认设置。
无-什么都不要做。原始会话将保留。
newSession-创建一个新的“干净”会话,而不复制现有会话数据。
我正在使用spring-boot 2.3.9和spring-security以及keycloak 12.0.4。 和我的服务bean创建配置 编辑:这可能与Spring-Cloud-Starter-Sleuth有关。如果我移除这个依赖关系,所有的事情就会像预期的那样工作。但我也需要侦探。
收到通知后,我启动一个活动,加载一个webview。它第一次运行良好,但当我第二次收到通知时,它会在现有的webview上打开一个新的webview。 我希望能够把活动放在前面,而不是创建一个新的网络视图,因为页面已经在后台打开了。 处理通知的函数: 我的网络视图活动: 我尝试使用webview的SaveInstanceState和restoreState,但没有成功。
问题内容: 我创建了一个社交网站,其中包含三个简单的表格,如下所示。 用户可以阻止任何他们想要的人,并且如果发生阻止,两个用户将不再在他们的新供稿中看到彼此的帖子。 在我的表中,这意味着并且不会看到彼此的帖子,但是“ user3”通常会看到每个人的帖子,因为他不属于该表格块。 从SQL查询中user1无法看到user2的帖子, 但是user2仍然可以看到user1的帖子, 这是我不想要的。我可以针
问题内容: 我有下一个代码: par.go 我用next运行它: 然后,确认此过程中有多少个线程: 您可以看到有5个线程。 如果我更改in代码的值,那么接下来的情况是: 我知道,去调度的后续机型,在这里,所以,是有(内核线程)。如果任何goroutine处于任何阻塞状态,则它们将从current脱离,并找到一个空闲的或新的if(如果找不到)。 所以,我的问题是:真的在阻止goroutine吗?如果
org.openqa.selenium.SessionNotCreatedException:无法创建新会话。(原始错误:命令失败:C:\Windows\system32\cmd.exe/s/C“C:\Program Files(x86)\Android\Android sdk\platform tools\adb.exe”-s 69c7aa170104安装“C:\Program Files(x8