9.4.1 添加自定义的登录页
创建自定义登录页的第一步就是了解登录表单中都需要些什么。只需看一下默认登录页面的 HTML 源码,我们就能了解需要些什么:
1
<html>
2
<head><title>Login Page</title></head>
3
<body onload='document.f.username.focus();'>
4
<h3>Login with Username and Password</h3>
5
<form name='f' th:action='/spittr/login' method='POST'>
6
<table>
7
<tr><td>User:</td><td>
8
<input type='text' name='username' value='' /></td></tr>
9
<tr><td>Password:</td>
10
<td><input type='password' name='password'/></td></tr>
11
<tr><td colspan='2'>
12
<input name="submit" type="submit" value="Login"/></td></tr>
13
<input name="_csrf" type="hidden" value="5sdf4-dfsd45s-4579-sdhf564fds45" />
14
</table>
15
</form>
16
</body>
17
</html>
Copied!
需要注意的一个关键点是提交到了什么地方。同时还需要注意 username 和 password 输入域,在你的登录页中,需要同样的输入域。最后,假设没有禁用 CSRF 的话,还需要保证包含了值为 CSRF token 的 "_csrf" 输入域。
如下程序清单所展现的 Thymeleaf 模板提供了一个与 Spittr 应用风格一致的登录页。
程序清单 9.8 为 Spittr 应用编写的自定义登录页(以 Thymeleaf 模板的形式)
1
<html xmlns="http://www.w3.org/1999/xhtml"
2
xmlns:th="http://www.thymeleaf.org">
3
<head>
4
<title>Spitter</title>
5
<link rel="stylesheet"
6
type="text/css"
7
th:href="@{/resources/style.css}"></link>
8
</head>
9
<body onload='document.f.username.focus();'>
10
<div id="header" th:include="page :: header"></div>
11
12
<div id="content">
13
14
<a th:href="@{/spitter/register}">Register</a>
15
16
17
<form name='f' th:action='@{/login}' method='POST'>
18
<table>
19
<tr><td>User:</td><td>
20
<input type='text' name='username' value='' /></td></tr>
21
<tr><td>Password:</td>
22
<td><input type='password' name='password'/></td></tr>
23
<tr><td colspan='2'>
24
<input id="remember_me" name="remember-me" type="checkbox"/>
25
<label for="remember_me" class="inline">Remember me</label></td></tr>
26
<tr><td colspan='2'>
27
<input name="submit" type="submit" value="Login"/></td></tr>
28
</table>
29
</form>
30
</div>
31
<div id="footer" th:include="page :: copy"></div>
32
</body>
33
</html>
Copied!
需要注意的是,在 Thymeleaf 模板中,包含了 username 和 password 输入域,就像默认的登录页一样,它也提交到了相对于上下文的 “/login” 页面上。因为这是一个 Thymeleaf 模板,因此隐藏的 “_csrf” 域将会自动添加到表单中。
Last modified 2yr ago
Copy link