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

JBoss EAP 7.1+IIS环境下Windows域登录配置指导请求

解决JBoss EAP 7.1中IIS NTLM认证用户名传递问题

从EAP 5.1迁移到7.1后,AJP认证传递的逻辑有不少变化,你之前的配置缺了几个核心环节,我帮你梳理下完整的配置步骤:

1. 确保AJP连接器配置正确

首先在standalone-full.xml里找到AJP连接器,必须明确设置tomcat-authentication="false",让JBoss跳过自身认证,信任IIS传递的用户信息:

<connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp" tomcat-authentication="false"/>

同时确认系统属性已经正确设置(你之前做了这步,但再核对下):

<system-properties>
    <property name="org.apache.coyote.ajp.DEFAULT_TOMCAT_AUTHENTICATION" value="false"/>
</system-properties>

2. 配置专属安全域(关键!)

EAP 7.1需要专门的安全域来提取IIS通过AJP传递的REMOTE_USER值,在standalone-full.xml的security-domains节点下添加:

<security-domain name="IISAuthDomain" cache-type="default">
    <authentication>
        <login-module code="org.jboss.security.auth.spi.RequestHeaderLoginModule" flag="required">
            <!-- 指定从REMOTE_USER头获取用户名 -->
            <module-option name="principalHeader" value="REMOTE_USER"/>
            <!-- 忽略JBoss自身的安全约束,因为IIS已经做了认证 -->
            <module-option name="ignoreSecurityConstraints" value="true"/>
            <!-- 如果不需要传递角色可以留空,这里设为REMOTE_ROLES备用 -->
            <module-option name="rolesHeader" value="REMOTE_ROLES"/>
        </login-module>
    </authentication>
</security-domain>

这个登录模块的作用是直接从请求属性中提取已认证的用户名,不需要再次校验密码。

3. 配置Web应用的安全关联

3.1 修改jboss-web.xml

在你的Web应用的WEB-INF目录下(没有就新建)添加jboss-web.xml,关联刚才的安全域:

<jboss-web>
    <security-domain>IISAuthDomain</security-domain>
    <!-- 可选:关闭审计避免冗余日志 -->
    <disable-audit>true</disable-audit>
</jboss-web>

3.2 调整web.xml配置

更新web.xml的登录配置和安全约束,确保应用知道要使用IIS的NTLM认证:

<!-- 登录配置 -->
<login-config>
    <auth-method>NTLM</auth-method>
    <realm-name>IISAuthDomain</realm-name>
</login-config>

<!-- 安全约束:保护所有资源,允许任意已认证用户访问 -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>All Application Resources</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

<!-- 定义通配角色 -->
<security-role>
    <role-name>*</role-name>
</security-role>

4. 检查ISAPI Redirect配置

确认IIS侧的isapi_redirect.properties里开启了NTLM支持:

enable_ntlm=1

同时确保worker.properties里的AJP worker配置正确,指向JBoss的AJP端口(默认8009)。

5. 调试验证

如果还是有问题,开启JBoss的调试日志排查:
在standalone-full.xml里添加日志配置:

<logger category="org.jboss.security">
    <level name="DEBUG"/>
</logger>
<logger category="org.apache.coyote.ajp">
    <level name="DEBUG"/>
</logger>

重启后查看日志,确认请求中是否包含REMOTE_USER属性,以及安全域是否正确提取了用户名。

做完这些配置后,重启JBoss和IIS,应该就能通过facesFacade.getExternalContext().getUserPrincipal().getName()获取到Windows认证后的用户名了。

内容的提问来源于stack exchange,提问作者samuebe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:25:34