现在我们来用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的过期时间。