15.2. 配置 Jakarta 授权安全性


您可以通过正确配置安全域来配置 Jakarta 授权,然后修改 jboss-web.xml 以包含所需的参数。

将 Jakarta 身份验证添加到安全域

要将 Jakarta 授权支持添加到安全域,请将 Jakarta Authorization 授权策略添加到安全域的授权堆栈,并设置了 所需 标志。以下是具有 Jakarta 授权支持的安全域示例:不过,建议您从管理控制台或管理 CLI 配置安全域,而不是直接修改 XML。

示例:使用 Jakarta 身份验证的安全域

<security-domain name="jacc" cache-type="default">
    <authentication>
        <login-module code="UsersRoles" flag="required">
        </login-module>
    </authentication>
    <authorization>
        <policy-module code="JACC" flag="required"/>
    </authorization>
</security-domain>
Copy to Clipboard Toggle word wrap

配置 Web 应用程序以使用 Jakarta 身份验证

jboss-web.xml 文件位于部署的 WEB-INF/ 目录中,包含 Web 容器的覆盖和其他特定于 JBoss 的配置。要使用 Jakarta Authorization-enabled 安全域,您需要包含 <security-domain> 元素,同时将 <use-jboss-authorization> 元素设置为 true。以下 XML 配置为使用上面的 Jakarta Authorization 安全域:

示例:使用 Jakarta 身份验证安全域

<jboss-web>
    <security-domain>jacc</security-domain>
    <use-jboss-authorization>true</use-jboss-authorization>
</jboss-web>
Copy to Clipboard Toggle word wrap

配置 Jakarta Enterprise Beans 应用程序以使用 Jakarta 身份验证

将 Jakarta Enterprise Beans 配置为使用安全域,并使用 Jakarta 授权与 Web 应用不同。对于 Jakarta Enterprise Beans,您可以在 ejb-jar.xml 描述符中声明方法权限或方法组。在 <ejb-jar> 元素中,任何子 <method-permission> 元素都包含有关 Jakarta 授权角色的信息。详情请查看以下示例配置。EJBMethodPermission 类是 Jakarta EE API 的一部分,并记录在 EJBMethodPermission 类中。

示例:Jkarta Enterprise Beans 中的 Jakarta 身份验证方法权限

<ejb-jar>
  <assembly-descriptor>
    <method-permission>
      <description>The employee and temp-employee roles can access any method of the EmployeeService bean </description>
      <role-name>employee</role-name>
      <role-name>temp-employee</role-name>
      <method>
        <ejb-name>EmployeeService</ejb-name>
        <method-name>*</method-name>
      </method>
    </method-permission>
  </assembly-descriptor>
</ejb-jar>
Copy to Clipboard Toggle word wrap

您还可以使用安全域限制 Jakarta Enterprise Beans 的身份验证和授权机制,就如对 Web 应用执行的操作一样。安全域在 <security> 子元素的 jboss-ejb3.xml 描述符中声明。除了安全域外,您还可以指定 <run-as-principal>,它更改了 Jakarta Enterprise Beans 运行的主体。

示例:Jkarta Enterprise Beans 中的安全域文化

<ejb-jar>
    <assembly-descriptor>
        <security>
        <ejb-name>*</ejb-name>
        <security-domain>myDomain</security-domain>
        <run-as-principal>myPrincipal</run-as-principal>
        </security>
    </assembly-descriptor>
</ejb-jar>
Copy to Clipboard Toggle word wrap

使用 elytron 子系统启用 Jakarta 授权

在传统安全子系统中禁用 Jakarta 身份验证

默认情况下,应用服务器使用传统 安全 子系统来配置 Jakarta 授权策略提供商和工厂。默认配置映射到 PicketBox 中的实施。

要使用 Elytron 管理 Jakarta 授权配置,或您要安装到应用服务器的任何其他策略,您必须首先在旧 安全 子系统中禁用 Jakarta 授权。为此,您可以使用以下管理 CLI 命令:

/subsystem=security:write-attribute(name=initialize-jacc, value=false)
Copy to Clipboard Toggle word wrap

如果不这样做,可能会导致服务器日志中出现以下错误: MSC000004: Failure 在服务 org.wildfly.security.policy: java.lang.StackOverflowError.

定义 Jakarta 身份验证策略提供程序

elytron 子系统根据 Jakarta 授权规范提供内置策略提供程序。要创建策略供应商,您可以执行以下管理 CLI 命令:

/subsystem=elytron/policy=jacc:add(jacc-policy={})

reload
Copy to Clipboard Toggle word wrap

为 Web 部署启用 Jakarta 身份验证

定义了 Jakarta Authorization 策略供应商后,您可以执行以下命令为 web 部署启用 Jakarta Authorization:

/subsystem=undertow/application-security-domain=other:add(security-domain=ApplicationDomain,enable-jacc=true)
Copy to Clipboard Toggle word wrap

以上命令为应用定义了一个默认安全域(如果 jboss-web.xml 文件中未提供)。如果您已经定义了 application-security-domain,只需要启用 Jakarta 授权,您可以执行以下命令:

/subsystem=undertow/application-security-domain=my-security-domain:write-attribute(name=enable-jacc,value=true)
Copy to Clipboard Toggle word wrap

为 Jakarta Enterprise Beans 部署启用 Jakarta 身份验证

定义了 Jakarta Authorization 策略供应商后,您可以通过执行以下命令为 Jakarta Enterprise Beans 部署启用 Jakarta Authorization:

/subsystem=ejb3/application-security-domain=other:add(security-domain=ApplicationDomain,enable-jacc=true)
Copy to Clipboard Toggle word wrap

以上命令为 Jakarta Enterprise Beans 定义了一个默认安全域。如果您已经定义了 application-security-domain,而只希望启用 Jakarta 授权,您可以按如下方式执行命令:

/subsystem=ejb3/application-security-domain=my-security-domain:write-attribute(name=enable-jacc,value=true)
Copy to Clipboard Toggle word wrap

创建自定义 Elytron 策略提供程序

当您需要自定义 java.security.Policy 时,会使用自定义策略提供程序,例如在您要与一些外部授权服务集成以检查权限时。若要创建自定义策略提供程序,您需要实施 java.security.Policy,创建并插入具有该实施的自定义模块,并在 elytron 子系统中使用模块的实施。

/subsystem=elytron/policy=policy-provider-a:add(custom-policy={class-name=MyPolicyProviderA, module=x.y.z})
Copy to Clipboard Toggle word wrap

如需更多信息,请参阅 策略提供程序属性

注意

在大多数情况下,您可以使用 Jakarta 授权策略提供程序,因为它应当属于任何符合 Jakarta EE 规范的应用服务器。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat