现在我们来用Spring Security检测一下登录功能,添加在views下添加一个main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> 我已经登录进来了! </body> </html>
在LoginController里添加登录main的映射,这个方法说明请求main.do的时候,跳转main
@RequestMapping(method=RequestMethod.GET,value="/main.do") public String toMain() { return "main"; }
我们知道前面登录页面的action请求为j_spring_security_check,因此我们要设置该请求应该跳转到哪里,因此我们需要在dogstore-security.xml添加<form-login default-target-url="/main.do" />
<http auto-config="true" use-expressions="true"> <intercept-url pattern="/login.do" access="permitAll"/> <intercept-url pattern="/*" access="hasRole('ROLE_USER')"/> <form-login default-target-url="/main.do" /> </http>
这样如果登录页面发送请求,default-target-url默认登录成功后跳转的url,还有其他属性可以自己去查查,这样我们用guest/guest登录,就可以登录进main.jsp。
顺便我们来说说Spring Security实现remember-me功能,修改dogstore-security.xml配置文件,添加<remember-me>声明。设置key属性为jbcpPetStore:
<http auto-config="true" use-expressions="true"> <intercept-url pattern="/login.do" access="permitAll"/> <intercept-url pattern="/*" access="hasRole('ROLE_USER')"/> <form-login default-target-url="/main.do" /> <remember-me key="jbcpPetStore"/> </http>
修改登录页面remember-me的checkbox框
<label> <input type="checkbox" id="_spring_security_remember_me" name="_spring_security_remember_me"> Remember me? </label>
当我们再次登录时,如果Remember Me被选中,一个Remember Me的cookie将会设置在用户的浏览器中。
如果用户关闭浏览器并重新打开访问一个JBCP Pets站点上需要认证的页面,他将不会再看到登录页了。请亲自试一下——登录并将Remember Me选项选中,收藏首页,然后重启浏览器并再次访问首页。你能发现你直接登录成功并不再需要提供凭证。
Remember me功能设置了一个cookie在用户的浏览器上,它包含一个Base64编码的字符串,包含以下内容:
用户的名字;
过期的日期/时间;
一个MD5的散列值包括过期日期/时间、用户名和密码;
应用的key值,是在<remember-me>元素的key属性中定义的。
这些内容将被组合成一个cookie的值存储在浏览器中以备后用。
可以修改两个常用的配置来改变remember me功能的默认行为:
属性 | 描述 |
Key | 为remember mecookie定义一个唯一的key值,以与我们的应用关联 |
token-validity-seconds | 定义时间的长度(以秒计)。Remember me的cookie将在将被视为认证合法,并且也将用于设置cookie的过期时间。 |