你可能会想知道系统提示您登录时登录表单从哪里来的,因为我们都没有提供任何的HTML或JSP文件。由于Spring Security的默认配置并没有明确设定一个登录页面的URL,Spring Security自动生成一个,基于这个功能被启用,使用默认URL处理登录的提交内容,登录后跳转的URL等等。
自动生成的登录页面可以方便应用的快速启动和运行,大多数应用程序都需要提供自己的登录页面。要做到这一点,我们可以更新我们的配置,如下所示:
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login") //注1
.permitAll(); //注2
}
1、 指定登陆页的路径;
2、 我们必须允许所有用户访问我们的登录页(例如未验证的用户),这个formLogin().permitAll()方法允许基于表单登录的所有URL的所有用户的访问;
一个我们当前配置使用的JSP实现的页面如下:
下面这个登陆页是我们的当前配置,如果不符合我们的要求我们可以很容易的更新我们的配置。
<c:url value="/login" var="loginUrl"/>
<form action="${loginUrl}" method="post"> <!-- 1 -->
<c:if test="${param.error != null}"> <!-- 2 -->
<p>
Invalid username and password.
</p>
</c:if>
<c:if test="${param.logout != null}"> <!-- 3 -->
<p>
You have been logged out.
</p>
</c:if>
<p>
<label for="username">Username</label>
<input type="text" id="username" name="username"/><!-- 4 -->
</p>
<p>
<label for="password">Password</label>
<input type="password" id="password" name="password"/><!-- 5 --> </p>
<input type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token}"/><!-- 6 -->
<button type="submit" class="btn">Log in</button>
</form>
1、 一个POST请求到/login用来验证用户;
2、 如果参数有错误,验证尝试失败;
3、 如果请求参数logout存在则登出;
4、 登录名参数必须被命名为username;
5、 密码参数必须被命名为password;
6、 CSRF参数,了解更多查阅后续“包含CSRFToken”和“跨站请求伪造(CSRF)”相关章节;