表单认证 ⾸先,要为⽤户的登陆创建你⾃⼰的登陆定制HTML表单(也可以是JSP)。 然后创建⼀个定制的HTML错误页⾯,当⽤户产⽣⼀个登录错误时,容器就可以使⽤这个错误页⾯。 最后,在web.xml中使⽤< login-config>元素把两个表单关联起来。 tomcat-users.xml:与讲稿1⼀致。 web.xml中:与讲稿1⼀致。但是login-config中的BASIC换成下⾯这些代码。
时间: 2023-12-14 10:38:55 浏览: 27
对于表单认证,需要在web.xml文件中配置login-config元素,指定使用form作为认证方式,同时指定登录页面和错误页面的路径。示例如下:
```
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/loginError.jsp</form-error-page>
</form-login-config>
</login-config>
```
其中,auth-method指定认证方式为FORM;form-login-page指定登录页面的路径;form-error-page指定错误页面的路径。
在login.jsp页面中,需要包含一个表单,用于接收用户输入的用户名和密码,并将其提交到服务器进行验证。示例如下:
```
<form action="j_security_check" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="j_username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="j_password"><br><br>
<input type="submit" value="Login">
</form>
```
其中,action属性指定表单提交的处理程序为j_security_check,name属性分别为j_username和j_password,与服务器端的验证代码对应。
在loginError.jsp页面中,需要显示登录错误信息,提示用户重新输入用户名和密码。示例如下:
```
<p>Login Error: Invalid username or password.</p>
<form action="j_security_check" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="j_username"><br><br>
<label for="password">Password:</label>
<input type="password" id="password" name="j_password"><br><br>
<input type="submit" value="Login">
</form>
```
在服务器端,需要编写验证代码,将用户输入的用户名和密码与数据库中保存的用户信息进行比对,判断是否允许用户登录。示例如下:
```
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("j_username");
String password = request.getParameter("j_password");
if (isValidUser(username, password)) {
request.getSession().setAttribute("username", username);
response.sendRedirect("home.jsp");
} else {
RequestDispatcher rd = request.getRequestDispatcher("/loginError.jsp");
rd.forward(request, response);
}
}
private boolean isValidUser(String username, String password) {
// TODO: validate user against database
}
```
其中,isValidUser方法用于验证用户名和密码是否合法,可以根据具体情况自行实现。如果验证通过,则在session中保存用户信息,并跳转到主页;如果验证失败,则使用RequestDispatcher将请求转发到错误页面。