Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多台服务器上使用Spring Security和Spring Redis会话_Java_Spring_Session_Spring Security_Spring Session - Fatal编程技术网

Java 在多台服务器上使用Spring Security和Spring Redis会话

Java 在多台服务器上使用Spring Security和Spring Redis会话,java,spring,session,spring-security,spring-session,Java,Spring,Session,Spring Security,Spring Session,我有一个spring项目,刚刚添加了带有redis数据存储的spring会话来保存会话对象。它已经对页面权限等使用了sring安全性。导入更新为使用spring 4.1.6。和安全4.0.1 它目前正在使用基于xml的配置。我已经进行了设置,因此spring会话筛选器位于spring安全筛选器之前 <!-- Spring session filters --> <filter> <filter-name>springSessionRepositoryF

我有一个spring项目,刚刚添加了带有redis数据存储的spring会话来保存会话对象。它已经对页面权限等使用了sring安全性。导入更新为使用spring 4.1.6。和安全4.0.1

它目前正在使用基于xml的配置。我已经进行了设置,因此spring会话筛选器位于spring安全筛选器之前

<!-- 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>

springSessionRepositoryFilter
org.springframework.web.filter.DelegatingFilterProxy
springSessionRepositoryFilter
/*
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
进入登录页面时,会出现一个cookie,如预期的那样。一个新的“会话”cookie,它与redis中的cookie相关。但是,在登录时,会创建原始的JSESSIONID cookie,这不会在redis数据库中持久化。此cookie是必需的,好像我将其设置为“无状态”,则系统不会登录

这意味着在UI的多个实例上,服务器之间会有不同的安全会话,从而导致redis数据存储冗余

我目前不确定是否需要JSESSIONID,因为在登录时,大多数字段都放在会话中。在检索用户等时,使用正确的会话cookie,并使用相同的cookie保存信息。除了出于安全方面的原因,有没有人能够解释它的必要性


是否有一种方法可以将JSESSIONID也保存在数据库中,或者在正常会话cookie中的安全会话中保存其他信息

问题在于请求上下文是在添加spring会话筛选器之前设置的。解决方案是在设置requestContext时显式设置,因此在spring会话之后

<!-- 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>

<!-- Request context filter - has to be after session so replaces the jsessionid with correct session -->
<filter>
    <filter-name>requestContextFilter</filter-name>
    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>requestContextFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

springSessionRepositoryFilter
org.springframework.web.filter.DelegatingFilterProxy
springSessionRepositoryFilter
/*
requestContextFilter
org.springframework.web.filter.RequestContextFilter
requestContextFilter
/*

这需要添加到web-INF的web.xml中。问题是请求上下文是在添加spring会话筛选器之前设置的。解决方案是在设置requestContext时显式设置,因此在spring会话之后

<!-- 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>

<!-- Request context filter - has to be after session so replaces the jsessionid with correct session -->
<filter>
    <filter-name>requestContextFilter</filter-name>
    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>requestContextFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

springSessionRepositoryFilter
org.springframework.web.filter.DelegatingFilterProxy
springSessionRepositoryFilter
/*
requestContextFilter
org.springframework.web.filter.RequestContextFilter
requestContextFilter
/*
这需要添加到web-INF的web.xml中