首先看remember-me的写法:
<security:remember-me key="elim" user-service-ref="userDetailsService"/>
在扩展一下:这行配置所在的位置:
<security:http auto-config="true">
<security:form-login/>
<!-- 定义记住我功能,通过user-service-ref指定将要使用的UserDetailsService-->
<security:remember-me key="elim" user-service-ref="userDetailsService"/>
<security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>
<bean id="userDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
key: 用来存放token的,(一会将什么是token)
user-service-ref:指的是从缓存中获取用户信息
token的理解:
知道token之前,先找了解下cookie即客户端是如何存放信息的:
当用户选择了记住我成功登录后,Spring Security将会生成一个cookie发送给客户端浏览器。cookie值由如下方式组成:
base64(username+":"+expirationTime+":"+md5Hex(username+":"+expirationTime+":"+password+":"+key))
Ø username:登录的用户名。
Ø password:登录的密码。
Ø expirationTime:token失效的日期和时间,以毫秒表示。
Ø key:用来防止修改token的一个key。
token就在这里key里存放remember-me里为何又要引入token呢
Remember-Me是指网站能够在Session之间记住登录用户的身份,具体来说就是我成功认证一次之后在一定的时间内我可以不用再输入用户名和密码进行登录了,系统会自动给我登录。这通常是通过服务端发送一个cookie给客户端浏览器,下次浏览器再访问服务端时服务端能够自动检测客户端的cookie,根据cookie值触发自动登录操作。Spring Security为这些操作的发生提供必要的钩子,并且针对于Remember-Me功能有两种实现。一种是简单的使用加密来保证基于cookie的token的安全,另一种是通过数据库或其它持久化存储机制来保存生成的token。