dex.jsp 页面的 GET 和 POST 方法,只允许 employee 角色访问它们,则需要使用以下 web.xml 配置来实现:
...
<web-app>
<servlet>
...
</servlet>
<security-constraint>
<web-resource-collection>
<web-resource-name>MySecureResource</web-resource-name>
<url-pattern>/index.jsp</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>employee<role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>default</realm-name>
<login-config>
<security-role>
<role-name>employee</role-name>
</security-role>
</web-app>
对于只有某个角色才具有访问权限的应用程序来说,您需要在应用程序使用的角色与应用服务器定义的组或主体之间建立映射。为了在应用程序所使用的 employee 角色和应用服务器默认域定义的 engineer 组之间建立映射,您仍然需要在运行时部署描述符 sun-application.xml、sun-ejb-jar.xml 或 sun-web.xml 中指定该安全角色映射。
例如,将以下代码添加到 sun-application.xml 中就可以实现在 engineer 组的所有用户与某个应用程序的 employee 角色之间建立映射。
<security-role-mapping>
<role-name>employee</employee>
<group-name>engineer</group-name>
</security-role-mapping>
部署描述符覆盖注释行为。
示例:假设有以下 Enterprise JavaBean:
@Stateless
public class HelloEJB implements Hello {
@PermitAll
public String hello1(String msg) {
return "1: Hello, " + msg;
}
@RolesAllowed("javaee")
public String hello2(String msg) {
return "2: Hello, " + msg;
}
@DenyAll
public String hello3(String msg) {
return "3: Hello, " + msg;
}
}
安全注释和授权在GlassFish和Java EE 5 SDK中的应用(6)
时间:2011-07-22
您可以通过应用程序部署描述符 ejb-jar.xml 来覆盖方法权限:
<ejb-jar ...>
<enterprise-beans>
...
</enterprise-beans>
<assembly-descriptor>
<security-role>javaee</security-role>
<method-permission>
<role-name>javaee</role-name>
<method>
<ejb-name>HelloEJB</ejb-name>
<method-intf>Local</method-intf>
|