17.5. 在 Servlet 里使用基于角色的安全性
要在 servlet 里添加安全性,你可以将每个 servlet 映射到 URL 模式,并在需要设置安全性的 URL 模式上创建安全性约束。这些安全性约束限制对 URL 的访问的角色。其验证和授权是由 WAR 的
jboss-web.xml 里指定的安全域处理的。
前提条件
在你在 servlet 里使用基于角色的安全性之前,用来验证和授权访问的安全域需要在 JBoss EAP 6 容器里进行配置。
过程 17.2. 在 Servlet 里添加基于角色的安全性
在 servlet 和 URL 模式间添加映射。
使用web.xml里的<servlet-mapping>元素来映射单独的 servlet 和 URL 模式。下面的例子映射名为DisplayOpResult的 servlet 到 URL 模式/DisplayOpResult。<servlet-mapping> <servlet-name>DisplayOpResult</servlet-name> <url-pattern>/DisplayOpResult</url-pattern> </servlet-mapping>添加安全约束到 URL 模式。
要映射 URL 模式到安全约束,可以使用<security-constraint>。下面的例子约束了具有角色eap_admin的 principal 对 URL 模式/DisplayOpResult的访问。这个角色需要出现在安全域里。<security-constraint> <display-name>Restrict access to role eap_admin</display-name> <web-resource-collection> <web-resource-name>Restrict access to role eap_admin</web-resource-name> <url-pattern>/DisplayOpResult/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>eap_admin</role-name> </auth-constraint> </security-constraint> <security-role> <role-name>eap_admin</role-name> </security-role> <login-config> <auth-method>BASIC</auth-method> </login-config>你需要指定验证方法,它可以是BASIC, FORM, DIGEST, CLIENT-CERT, SPNEGO.。这个例子使用了BASIC验证。在 WAR 的
jboss-web.xml里指定安全域添加安全域到 WAR 的jboss-web.xml以连接 servlet 到配置好的安全域,它知道如何根据安区性约束验证和授权 principal。下面的例子使用名为acme_domain的安全域。<jboss-web> ... <security-domain>acme_domain</security-domain> ... </jboss-web>
例 17.1. 配置了基于角色的安全性的 web.xml 示例
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<display-name>Use Role-Based Security In Servlets</display-name>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
<servlet-mapping>
<servlet-name>DisplayOpResult</servlet-name>
<url-pattern>/DisplayOpResult</url-pattern>
</servlet-mapping>
<security-constraint>
<display-name>Restrict access to role eap_admin</display-name>
<web-resource-collection>
<web-resource-name>Restrict access to role eap_admin</web-resource-name>
<url-pattern>/DisplayOpResult/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>eap_admin</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<role-name>eap_admin</role-name>
</security-role>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>