一、步骤
- 设置用户名、密码和角色
- 告诉服务器目前正在使用基于表单的验证。指定login页面和login-error页面
- 创建登陆页面和登陆失败页面
- 指定要保护的URL
- 列出可以访问的角色
- 指定哪些URL只能通过SSL访问
- 禁用invoker servlet
二、实例
- 将D:\Test\Servers\Tomcat v6.0 Server at localhost-config/tomcat-users.xml文件当中的
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<user password="tomcat" roles="tomcat" username="tomcat"/>
<user password="tomcat" roles="tomcat,role1" username="both"/>
<user password="tomcat" roles="role1" username="role1"/>
</tomcat-users>注释去掉,这样我们就有了tomcat和role1这两个角色,同时三个用户。 - 在web.xml文件当中加入如下代码:
我们要保护的资源
<security-constraint>
<web-resource-collection>
<web-resource-name>ssl</web-resource-name>
<url-pattern>/ssl/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>tomcat</role-name>
</auth-constraint>
<!-- <user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint> -->
</security-constraint>
声明能够访问这些资源的角色
<security-role>
<role-name>tomcat</role-name>
</security-role>
告诉服务器使用表单验证
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/admin/login.jsp</form-login-page>
<form-error-page>/admin/login-error.html</form-error-page>
</form-login-config>
</login-config> - 创建login.jsp和login-error.html页面。login-error.html简单提示登录错误即可。其中login页面如下。
<%@ page language="java" pageEncoding="UTF-8"%>
<%
response.setHeader("Cache-Control", "no-store,no-cache");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", -1);
if (request.getRemoteUser() != null) {
response.sendRedirect("/admin/login.jsp");
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Login</title>
</head>
<body>
<center>
<h1>Login</h1>
<form action="j_security_check" method="post">
<table>
<tr>
<td>User name: <input type="text" name="j_username" />
<tr>
<td>Password: <input type="password" name="j_password" />
<tr>
<th><input type="submit" value="Log In" />
</table>
</form>
</center>
</body>
</html> - 在ssl文件夹下建立要访问的页面即可
三、说明
声明式安全是基于服务器的安全,其对于servlet和jsp也完全透明的,servlet和jsp页面无需任何改动。用户登录不成功时返回403