You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WildFly 33 Beta添加@Stateless服务后遗留安全域兼容性报错求助

问题:WildFly 33 Beta 包含@Stateless服务时Elytron BASIC认证报错

使用WildFly 33 Beta结合Elytron实现BASIC认证的项目,当加入@Stateless服务后启动服务器,抛出以下错误:

Caused by: java.lang.IllegalStateException: WFLYEJB0530: The deployment is configured to use a legacy security domain 'servlet-security-quickstart' which is no longer supported.

当前配置文件

jboss-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.jboss.org/schema/jbossas
    http://www.jboss.org/schema/jbossas/jboss-web_7_2.xsd">
   <!-- Configure usage of the security domain "other" -->
   <security-domain>servlet-security-quickstart</security-domain>
   <disable-audit>true</disable-audit>
</jboss-web>

web.xml

<?xml version="1.0"?>
<web-app version="6.0" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd">

   <security-constraint>
      <web-resource-collection>
         <web-resource-name>MyDomain admin users</web-resource-name>
         <url-pattern>/admin/*</url-pattern>
      </web-resource-collection>
      <auth-constraint>
         <role-name>ROLE_ADMIN</role-name>
      </auth-constraint>
   </security-constraint>

   <security-role>
      <role-name>ROLE_USER</role-name>
   </security-role>

   <security-role>
      <role-name>ROLE_ADMIN</role-name>
   </security-role>

   <!-- Configure login to be HTTP Basic -->
   <login-config>
      <auth-method>BASIC</auth-method>
   </login-config>

   <servlet>
      <servlet-name>Faces Servlet</servlet-name>
      <servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
      <servlet-name>Faces Servlet</servlet-name>
      <url-pattern>*.xhtml</url-pattern>
   </servlet-mapping>
   <welcome-file-list>
      <welcome-file>index.xhtml</welcome-file>
   </welcome-file-list>
</web-app>

现象说明

  • 移除@Stateless服务后,BASIC认证可正常显示登录窗口并完成登录;
  • 移除jboss-web.xml中的security-domain配置,则无法完成登录。

解决方案

1. 替换jboss-web.xml的安全域配置为Elytron格式

WildFly 33中EJB组件不再支持legacy安全域,需要改用Elytron专属的<elytron-security-domain>标签替换原有的<security-domain>:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.jboss.org/schema/jbossas
    http://www.jboss.org/schema/jbossas/jboss-web_7_2.xsd">
   <!-- 使用Elytron安全域替代legacy安全域 -->
   <elytron-security-domain>servlet-security-quickstart</elytron-security-domain>
   <disable-audit>true</disable-audit>
</jboss-web>

注意:此处的servlet-security-quickstart必须是WildFly Elytron子系统中已配置的安全域名称,而非legacy安全域。

2. 确认Elytron安全域配置有效性

检查WildFly的服务器配置文件(如standalone.xml),确保已正确配置对应名称的Elytron安全域,包含必要的认证、授权组件,示例配置片段:

<subsystem xmlns="urn:wildfly:elytron:15.0" final-providers="combined-providers" disallowed-providers="OracleUcrypto">
    <security-domains>
        <security-domain name="servlet-security-quickstart" default-realm="UsersRealm" permission-mapper="default-permission-mapper">
            <realm name="UsersRealm" role-decoder="from-roles-attribute"/>
        </security-domain>
        <!-- 其他Elytron配置项 -->
    </security-domains>
</subsystem>

3. 确保Web与EJB层安全上下文统一

当部署中包含EJB组件时,WildFly会同步处理Web和EJB的安全上下文,必须保证两者都使用Elytron安全体系,避免混合使用legacy和Elytron配置。

修改完成后重启服务器,保留@Stateless服务即可正常启动并完成BASIC认证。


内容的提问来源于stack exchange,提问作者Papp Zoltán

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:14:53