Wildfly 9 会话已过期但没有身份验证,除非浏览器关闭

Wildfly 9 session expired but no authentication unless browser closed

我在 Wildfly 9.0 中设置了自定义 security-domain。2.Final 用于测试,如下所示:

<security-domain name="LDAPAuth" cache-type="default">
<authentication>
  <login-module code="LdapExtended" flag="required">
    <module-option name="java.naming.factory.initial"
                   value="com.sun.jndi.ldap.LdapCtxFactory"/>
    <module-option name="java.naming.provider.url"
                   value="ldap://localhost:389"/>
    <module-option name="java.naming.security.authentication" value="simple"/>
    <module-option name="baseCtxDN" value="ou=People,dc=acme,dc=com"/>
    <module-option name="baseFilter" value="(uid={0})"/>
    <module-option name="rolesCtxDN" value="ou=Roles,dc=acme,dc=com"/>
    <module-option name="roleFilter" value="(member={1})"/>
    <module-option name="roleAttributeID" value="cn"/>
    <module-option name="searchScope" value="ONELEVEL_SCOPE"/>
  </login-module>
</authentication>
</security-domain>

在我的 web.xml 中,我在 login-config.

中引用了这个 security-domain 名称 (LDAPAuth)

当我提供在我的本地 LDAP 中配置的有效用户名和密码时,我被允许进入,否则身份验证失败。这很好用。问题是,一旦我进行了一次身份验证,我就再也不会收到提示,除非我关闭该浏览器 window 并打开一个新浏览器。如果我在我的代码中手动调用 session.invalidate();,如果会话自然过期(我将它设置为 1 分钟用于测试),或者即使我重新启动服务器,都没有关系!我是 Wildfly 的新手,但我使用其他应用程序服务器的经验告诉我,在上述任何情况下都应该重新提示我,所以我错过了什么?

可能您在 web.xml 中配置了 BASIC 身份验证方法。这意味着您的浏览器保留(记住)身份验证数据并在应用程序服务器要求时发送它们。所以它不会再次询问用户。使用 FORM 身份验证来避免这种行为。