定义角色
tomcat-users.xml
<?xml version="1.0" encoding="UTF-8"?><!-- 不建议这样做,如果不重启就无法修改内容 -->
<tomcat-users>
<role rolename="Guest"/>
<role rolename="Member"/>
<role rolename="Admin" />
<user username="Bill" password="coder" roles="Admin, Member, Guest"/>
<user username="Bill" password="coder" roles="Member, Guest"/>
<user username="Bill" password="coder" roles="Guest"/>
</tomcat-users>
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 定义角色 -->
<security-role><role-name>Admin</role-name></security-role>
<security-role><role-name>Member</role-name></security-role>
<security-role><role-name>Guest</role-name></security-role>
<!-- 定义资源/方法约束 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>UpdateRecipes</web-resource-name> <!-- 必要,由工具使用 -->
<url-pattern>/Beer/AddRecipe/*</url-pattern>
<url-pattern>/Beer/ReviewRecipe/*</url-pattern>
<http-method>GET</http-method> <!-- 未指定时全部HTTP方法都受约束 -->
<http-method>POST</http-method>
</web-resource-collection>
<!-- 列出能调用受约束HTTP方法的角色 -->
<auth-constraint>
<role-name>Admin</role-name>
<role-name>Member</role-name>
</auth-constraint>
<!-- 以声明方式保守地实现数据机密性和完整性 -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
<!--
NONE 默认值,没有数据保护
INTEGRAL 数据在传输过程中不能更改
CONFIDENTIAL 数据在传输过程中不能被别人看到
-->
</security-constraint>
<!-- 启用认证 -->
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<!--
BASIC 声明了这个元素,余下的一切都将由容器负责,请求一个受限资源时,容器会自动询问用户名和口令
DIGEST 摘要认证,如果容器支持,它会处理所有细节
CLIENT-CERT 客户证书认证,这种认证能提供最大强度的保护,但是客户必须先有证书
FORM 表单认证,如果启用<login-config>要如下写法
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/loginPage.html</form-login-page>
<form-error-page>/loginError.html</form-error-page>
</form-login-config>
</login-config>
-->
</web-app>
基于表单的认证
loginPage.html
<body>
Please login daddy-o
<!-- HTML登录表单中有3项是与容器通信的关键j_security_check,j_username,j_password -->
<!-- 要让容器工作HTML的登录表单的action必须是j_security_check -->
<form action="j_security_check" method="POST">
<input type="text" name="j_username"> <!-- 容器要求HTTP请求把用户名存储在j_username中 -->
<input type ="password" name="j_password">
<input type="submit" value="Enter">
</form>
</body>