【问题标题】:Spring Security JaasAuthenticationProvider does not see Wildfly 10 securitydomainSpring Security JaasAuthenticationProvider 看不到 Wildfly 10 安全域
【发布时间】:2016-08-22 15:55:15
【问题描述】:

我们正在将我们的代码从 JBoss 4.2.1 AS 和 Spring Security 3.2.9 迁移到 JBoss Wildfly 10.0.0 和 Spring Security 4.0.4

我的 Spring Security JaasAuthenticationProvider 与 Standalone.xml 中定义的 JBoss Wildfly 10 安全域集成时遇到以下问题:它不执行在我的安全域中定义的 LoginModules,实际上它似乎唯一找到的是 ClientLoginModule 定义在 wildfly 10.0.0 picketbox-4.9.4.jar 的 auth.conf 中(默认提供)。

我的安全域配置如下:

            <security-domain name="mysecdomain" cache-type="default">
                <authentication>
                    <login-module code="LdapExtended" flag="sufficient">
                        <module-options.../>
                    </login-module>
                </authentication>
            </security-domain>

我的 JaasAuthenticationProvider 在我部署的应用程序的应用程序上下文中:

    <bean id="jaasAuthenticationProvider" class=org.springframework.security.authentication.jaas.JaasAuthenticationProvider">
    <property name="loginConfig" value="WEB-INF/login.conf" />
    <property name="loginContextName" value="mysecdomain"/>
    <property name="callbackHandlers">
        <list>
            <bean class="org.springframework.security.authentication.jaas.JaasNameCallbackHandler" />
            <bean class="org.springframework.security.authentication.jaas.JaasPasswordCallbackHandler" />
        </list>
    </property>
    <property name="authorityGranters">
        <list>
            <bean class="com.my.MyAuthorityGranter" />
        </list>
    </property>
</bean>

但是当我执行定义的 jaasAuthenticationProvider 时,它会将以下内容输出到 Wildfly 的 server.log:

2016-04-27 03:37:18,367 TRACE [org.jboss.security] (default task-4) PBOX00221: Begin getAppConfigurationEntry(mysecdomain), size: 1
2016-04-27 03:37:18,368 TRACE [org.jboss.security] (default task-4) PBOX00222: getAppConfigurationEntry(mysecdomain), no entry found, trying parent config null
2016-04-27 03:37:18,368 TRACE [org.jboss.security] (default task-4) PBOX00223: getAppConfigurationEntry(mysecdomain), no entry in parent config, trying default other
2016-04-27 03:37:18,368 TRACE [org.jboss.security] (default task-4) PBOX00224: End getAppConfigurationEntry(mysecdomain), AuthInfo: AppConfigurationEntry[]:
[0]
LoginModule Class: org.jboss.security.ClientLoginModule
ControlFlag: LoginModuleControlFlag: required
Options:

2016-04-27 03:37:18,374 DEBUG [org.jboss.security] (default task-4) PBOX00350: Module option: jboss.security.security_domain, value: other
2016-04-27 03:37:18,374 DEBUG [org.jboss.security] (default task-4) PBOX00350: Module option: restore-login-identity, value: null
2016-04-27 03:37:18,374 DEBUG [org.jboss.security] (default task-4) PBOX00350: Module option: password-stacking, value: null
2016-04-27 03:37:18,376 TRACE [org.jboss.security] (default task-4) PBOX00240: Begin login method
2016-04-27 03:37:18,387 TRACE [org.jboss.security] (default task-4) PBOX00351: Obtained auth info from handler, principal: xxxxx, credential class: class [C
2016-04-27 03:37:18,388 TRACE [org.jboss.security] (default task-4) PBOX00241: End login method, isValid: true
2016-04-27 03:37:18,388 TRACE [org.jboss.security] (default task-4) PBOX00242: Begin commit method, overall result: true

很明显,我做错了什么但不知道是什么?以上在 JBoss 4.2.1 和 login-config.xml 中定义的应用程序策略中运行良好,但现在不行了

【问题讨论】:

    标签: spring-security jboss jaas wildfly-10


    【解决方案1】:

    找到解决方案:在新的 Spring Security 中(这里是 4.0.4 版本)需要将以下属性添加到 JaasConfigurationProvider,否则它将删除已上传的配置(安全域)并用 picketbox 默认配置替换它们:

    <property name="refreshConfigurationOnStartup" value="false"/>
    

    现在它像魅力一样工作,提供者可以看到所有定义的安全域

    【讨论】:

      猜你喜欢
      • 2017-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-15
      • 2017-05-15
      • 2014-02-05
      • 2017-09-16
      相关资源
      最近更新 更多