问题标签 [spring-session]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
880 浏览

java - Spring Session cookie 永不过期

我最近实现了 Spring Session。

我自己实现了 sessionRepository,因此在创建会话时,我将 setMaxInactiveIntervalInSeconds 配置为 60 秒。如果我调试此代码,会话对象具有正确的最大非活动间隔,但如果我在网站上等待而不做任何事情,则会话永远不会过期。

有什么想法可以解决这个问题吗?谢谢

0 投票
2 回答
6119 浏览

spring-security - 如何使用 Spring Session + Spring security xml 配置和多重安全过滤器

背景

大家好,我们有Spring使用Spring security. 我们通过定义定义了安全过滤器

哪里filter-chain-map

web.xml我们做的

一切都很好:)。现在Spring session根据 以下几行进行连接redisdoc

创建一个filter名为springSessionRepositoryFilter. 所以基本上我们所做的就是在每个自定义filter-chain中添加该过滤器作为第一个过滤器。IE:

结果:该应用程序似乎运行良好,并且monitoring通过redis-cli显示spring正在与之通信redis

问题

springSessionRepositoryFilter里面使用filter-chain可以吗?还是我们滥用了过滤系统?

谢谢,

橡木

编辑

似乎上述方法不适用于希望Authenticate从代码中获取用户的情况,即

将失败。也许是因为它不足以通过filter-chainof运行它org.springframework.security.web.FilterChainProxy

你觉得如何运行filterweb.xml

以上将强制运行springSessionRepositoryFilterspringSecurityFilterChain但在此示例org.springframework.web.filter.DelegatingFilterProxy中被调用两次。springSessionRepositoryFilter在过滤器之前作为过滤器运行的任何其他方法springSecurityFilterChain

0 投票
0 回答
1409 浏览

spring-security - Spring Security OAuth + Spring Session

我正在使用 Spring Security OAuth 构建具有基于令牌的身份验证的应用程序(使用这篇文章http://porterhead.blogspot.com/2014/05/securing-rest-services-with-spring.html)。

在下一步中,我想用令牌存储一些额外的数据。我决定,Spring Session 已经足够了。首先,它有HeaderHttpSessionStrategy(用户在自定义标头中发送会话 ID - X-Auth-Token),其次,它支持不同的存储(包括 Redis - 适合快速访问会话数据)。

Spring Security OAuth 使用Bearer Authorization,这意味着我需要创建子类 from HeaderHttpSessionStrategy,它将返回正确的会话 ID(而不是 from X-Auth-Token)。

所以我的问题是:

  1. 此刻如何在 Spring Security OAuth 中挂钩登录成功方法并使用提供的 ID(ID == 新生成的令牌)创建会话?
  2. 如何挂钩注销方法?
  3. 在这种情况下使用 Spring Session 是否正确?如果没有,有什么替代方案?
0 投票
2 回答
41842 浏览

redis - 使用以 Redis 作为后端的 Spring Session 时,默认会话超时是多少以及如何配置它

我的应用程序目前使用Spring Session和 Redis 作为后端。

我搜索了 Spring Session 的官方文档,但无法找到使用该模块时的默认会话超时。

另外,如果需要,我不确定如何更改默认超时。

有人可以建议吗?

0 投票
1 回答
11803 浏览

java - bean 的会话范围如何在 Spring MVC 应用程序中工作?

我是 Spring MVC 的新手,我对bean的会话范围有疑问。

进入一个项目,我有一个Cartbean,这个:

所以这个 bean 会被容器自动检测为组件,并通过以下方式将其设置为会话 bean

因此,据我了解,这意味着它会为每个用户会话自动创建一个 bean。

在我的示例中,Cart该类表示一个购物车,登录的用户将想要购买的物品放入其中。这是否意味着每个登录的用户部分都存在一个Cartbean 到HttpSession? 所以这个 bean 进入了会话,用户可以从中添加或删除项目。这种解释是正确的还是我错过了什么?

另一个疑问与proxyMode = ScopedProxyMode.TARGET_CLASS属性有关。这到底是什么意思呢?为什么将其应用于此 bean?

0 投票
2 回答
4134 浏览

spring - 在春季会话中配置 Cookie 域

所以我已经成功地在开发 localhost 域上使用 spring session 和 redis 实现了 SSO。但是当我使用两个子域部署到服务器时。

login.example.com

apps.example.com

他们总是在每个子域上创建新的会话 ID。我已经尝试在 tomcat 配置中使用 Context 进行配置。

但没有运气。

0 投票
2 回答
644 浏览

spring-session - 使用 Spring Session 进行单页应用程序的会话过期管理

我使用Spring Session,并且在会话管理方面遇到问题,尤其是在处理会话到期时。

这个想法是向客户端返回一个自定义的 Http Header,例如X-Application-Session-Is-New,如果会话已过期。

这是我想出的:

问题是我的过滤器似乎并不总是在会话到期时被调用,这可能是因为该请求不是 ajax 请求,并且在此之后立即创建了一个新的会话 ID。

谁能给我指出一个适当的策略来处理单页应用程序上的会话过期?

0 投票
2 回答
16566 浏览

spring - Zuul上的Spring Security预授权过滤器建立和共享会话

我在一个开发团队中从事一个使用基于 Spring 的微服务的大型项目。我们最近发现了 Spring Cloud 项目,并正在尝试实现 Netflix 服务、Zuul、Eureka、Ribbon 等。

在我们的环境中,在通过外部服务获得预授权之前,没有人可以访问我们的应用程序将在其上运行的域。一旦他们到达我们的应用程序,我们将能够通过授权服务提供的标头令牌获取用户的身份。

我希望 Zuul 使用预身份验证过滤器设置 Spring Security 以建立用户会话,并使用 Spring Session 使会话可用于所有后端微服务。

这是一种合法的方法吗?我能看到的关于 Zuul 安全性的唯一信息是将 OAuth2 令牌代理到后端服务的能力,但我们不需要 OAuth2。有没有更好的方法来建立用户会话并在我们的后端架构中的服务之间共享它?

0 投票
2 回答
5662 浏览

spring - 使用 Spring Boot、Session 和 Redis 创建会话时未复制会话

我正在尝试使用 Spring Cloud 的 Zuul、Eureka 和我自己的服务来实现微服务架构。我有多个具有 UI 和服务的服务,每个服务都可以使用 x509 安全性对用户进行身份验证。现在我正试图将 Zuul 放在这些服务的前面。由于 Zuul 无法将客户端证书转发到后端,我认为下一个最好的方法是在 Zuul 的前门对用户进行身份验证,然后使用 Spring Session 在后端服务中复制他们的身份验证状态。我遵循了 Dave Syer 的教程它几乎可以工作,但不是第一次请求。这是我的基本设置:

  • Zuul Proxy 在它自己的应用程序集中路由到后端服务。启用了 Spring 安全性来执行 x509 身份验证。成功认证用户。还有带有 @EnableRedisHttpSession 的 Spring Session
  • 后端服务还启用了 spring 安全性。我在这里尝试过启用/禁用 x509,但始终要求用户针对特定端点进行身份验证。还使用 Spring Session 和 @EnableRedisHttpSession。

如果您清除所有会话并重新开始并尝试访问代理,那么它会使用 zuul 服务器的证书将请求发送到后端。然后后端服务根据该用户证书查找用户,并认为该用户是服务器,而不是在 Zuul 代理中经过身份验证的用户。如果你只是刷新页面,那么你突然变成了后端的正确用户(在 Zuul 代理中认证的用户)。我正在检查的方式是在后端控制器中打印出 Principal 用户。所以在第一次请求时,我看到了服务器用户,在第二次请求时,我看到了真实用户。如果我在后端禁用 x509,在第一个请求时,我会得到 403,然后在刷新时,它会让我进入。

似乎会话没有足够快地复制到后端,因此当用户在前端进行身份验证时,在 Zuul 转发请求时它还没有到达后端。

有没有办法保证会话在第一个请求(即会话创建)时被复制?还是我错过了确保其正常工作的步骤?

以下是一些重要的代码片段:

Zuul 代理:

祖尔配置:

后端服务:

后端服务配置:

后端控制器之一:

0 投票
0 回答
1432 浏览

spring - Redis 实例交换使用量持续增长

我有一个 AWS Elasticache Redis 实例,用作 Spring Session 的支持。

查看控制台的大多数指标似乎都还可以,但我担心交换使用量正在增长,就像存在某种内存泄漏一样。

我是 Redis 和 Spring Session 的新手。这是我应该关心的事情吗?我该如何解决这个问题?

作为参考,这是一个屏幕截图: 堆栈继续增长