现在我们来用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编码的字符串,包含以下内容:
这些内容将被组合成一个cookie的值存储在浏览器中以备后用。
可以修改两个常用的配置来改变remember me功能的默认行为:
属性 | 描述 |
Key | 为remember mecookie定义一个唯一的key值,以与我们的应用关联 |
token-validity-seconds | 定义时间的长度(以秒计)。Remember me的cookie将在将被视为认证合法,并且也将用于设置cookie的过期时间。 |