我有一个 spring 项目,并且刚刚添加了带有 redis 数据存储的 spring session 来保存 session 对象。它已经将 sring 安全用于页面权限等。导入已更新为使用 spring 4.1.6。和安全 4.0.1。
它目前正在使用基于 xml 的配置。我已经设置,所以 spring session 过滤器在 spring security filter 之前
<!-- Spring session filters -->
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- security filters -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
进入登录页面后,正如预期的那样,有一个 cookie。一个新的“会话”cookie,与 redis 中的 cookie 相关联。但是在登录时,会创建原始的 JSESSIONID cookie,这不会保留在 redis 数据库中。此 cookie 是必需的,就像我将其设置为“无状态”一样,系统不会登录。
这意味着在 UI 的多个实例上,服务器之间将存在不同的安全会话,从而使 redis 数据存储变得冗余。
我目前不确定是否需要 JSESSIONID,因为登录时大多数字段都放在 SESSION 中。在检索用户等时使用正确的 SESSION cookie,并且相同的 cookie 用于保存信息。除了出于安全原因之外,是否有人能够解释它的必要性。
有没有办法将 JSESSIONID 也保存在数据库中,或者将安全会话中的信息额外保存在正常的 SESSION cookie 中。