5

I am using Spring security for Authentication and Authorization in my application. I am using Neo4j database as backend and implemented userDetailsService for authentication.

However, whenever my application restarts, user is forced to login once again. To overcome this, i am thinking to store session information in redis database and load the data to Spring security Context whenever application gets started.

Kindly pass on if there are any articles and pointers to implement the same.

I am thinking of following implementation for it, 1) For every successful authentication, store user details and session details in redis. This must be implemented in loadUserByUsername() method of UserDetailsService implementation 2) Remove the data from redis, whenver user logs out, Where can i do this information? Is there any spring security function where i can call this 3) Load all the data from redis to spring security whenever application restarts, again where do i need to write this logic?

Please let me know if i have missed any information.

4

4 回答 4

2

您需要做的就是实施一个

  • SecurityContextRepository 处理安全上下文存储到红色
  • 最终一个自定义过滤器检索/存储会话信息(GenericFilterBean)

我认为可以只给标准过滤器一个不同的存储库,但我不确定,无论如何我需要自己的实现......

于 2014-10-14T14:31:05.217 回答
2

在 redis 中存储会话现在是开箱即用的功能

http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession.html

于 2015-05-26T10:37:48.360 回答
1

您需要配置 Spring Security 的记住我功能。

记住我或持久登录身份验证是指网站能够记住会话之间主体的身份。这通常是通过向浏览器发送 cookie 来完成的,该 cookie 在未来的会话中被检测到并导致自动登录发生。Spring Security 为这些操作的发生提供了必要的钩子,并且有两个具体的 remember-me 实现。一种使用散列来保护基于 cookie 的令牌的安全性,另一种使用数据库或其他持久性存储机制来存储生成的令牌

Spring Security 文档中提供了更多信息:http: //static.springsource.org/spring-security/site/docs/3.1.x/reference/remember-me.html

您可以使用开箱即用的实现或注入您自己的(上述 redis)。

于 2012-11-04T09:13:21.567 回答
0

正如 Luke Taylor 所说,Tomcat 的默认操作是在容器重启时序列化/反序列化会话。 这里

标准管理器的 pathname 属性是序列化文件的名称。如果您不指定路径名 attirbute,则默认为 SESSIONS.SER 如果您不想在重新启动时恢复会话,则需要将其指定为空字符串值。

于 2013-11-27T16:01:58.260 回答