gpt4 book ai didi

java - 如何让 Spring Security 将 HTTP session 存储在数据库中以在多个服务器上使用 Web 应用程序?

转载 作者:太空狗 更新时间:2023-10-29 22:34:49 25 4
gpt4 key购买 nike

好的,我希望我的网络应用能够在多个网络服务器上使用 HTTP session 。我也不能使用粘性 session 或 session 复制!

既然 Spring Security 已经处理了 HTTP session ,那么 Spring Security 处理的最佳实践是什么? Spring 是否提供任何 OOTB?或者它是否可以选择将 session 信息存储到数据库中? SecurityContextPersistenceFilter?

最佳答案

您可以将容器配置为使用 JDBC 将 session 持久保存到数据库。如果您使用 tomcat,则可以配置 JDBC session 持久性提供程序。我想您也可以在其他容器上做类似的事情。

我已经在我的博客上记录了设置 tomcat JDBC session 持久性的步骤:http://web.archive.org/web/20160417070959/http://gerrydevstory.com/2013/08/21/tomcat-7-jdbc-session-persistence/

总而言之,您需要在 context.xml 中进行这样的配置:

<Manager className="org.apache.catalina.session.PersistentManager"
maxIdleBackup="10">
<Store className="org.apache.catalina.session.JDBCStore"
connectionURL="jdbc:mysql://localhost/mytomcat?user=root"
driverName="com.mysql.jdbc.Driver"
sessionAppCol="app_name"
sessionDataCol="session_data"
sessionIdCol="session_id"
sessionLastAccessedCol="last_access"
sessionMaxInactiveCol="max_inactive"
sessionTable="tomcat_sessions"
sessionValidCol="valid_session" />
</Manager>

但是,上面的 maxIdleBackup="10" 表示 session 只有在 10 秒不活动后才会被刷新到 jdbc 中。我不知道将它设置为 0 是否会起作用。

我想如果没有粘性负载均衡器 session ,让整个事情正常工作将很困难,例如:如何确保在下一个请求之前刷新 session 更新?您不能保证下一个请求将由同一个节点提供服务。

也许另一种选择是,如果您可以破解自己/那里有另一个直接写入数据库的 session 提供程序库。

2014 年 5 月 21 日编辑:

我刚弄明白 hazelcast WM is a great library to do peer-to-peer session replication .您需要做的就是将 hazelcast jar 添加到类路径中,将 hazelcast-wm 设置为 web.xml 上的过滤器并配置 hazelcast。它将自动跨集群复制 session 对象。

关于java - 如何让 Spring Security 将 HTTP session 存储在数据库中以在多个服务器上使用 Web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com