【问题标题】:How to write authenticationManager as a bean (Converting SamlAuthenticationManager to bean)如何将 authenticationManager 编写为 bean(将 SamlAuthenticationManager 转换为 bean)
【发布时间】:2017-10-21 02:14:40
【问题描述】:

我正在我的 Web 应用程序中实现 Spring SAML,该应用程序已经实现了 Spring 安全性,因此我现在有 2 个身份验证管理器。由于 spring 总是引用最后声明的 authenticationManager,我找到了将一个 authenticationManager 定义为 bean 的解决方案。

以下是我转换为 bean 之前的 AuthenticationManager:

<authentication-manager alias="samlAuthenticationManager">
    <!-- Register authentication manager for SAML provider -->
    <authentication-provider ref="samlAuthenticationProvider"/>
    <!-- Register authentication manager for administration UI -->
    <authentication-provider>
        <user-service id="adminInterfaceService">
            <user name="admin" password="admin" authorities="ROLE_ADMIN"/>
        </user-service>
    </authentication-provider>
</authentication-manager>

以下是我转换为bean后的代码:

<beans:bean id="samlAuthenticationManager" class="org.springframework.security.authentication.ProviderManager">
    <beans:constructor-arg>
        <beans:list>
            <beans:bean class="org.springframework.security.saml.SAMLAuthenticationProvider">
                <beans:property name="userDetails" value="adminInterfaceService"/>
            </beans:bean>
        </beans:list>
    </beans:constructor-arg>
</beans:bean>
<user-service id="adminInterfaceService">
    <user name="admin" password="admin" authorities="ROLE_ADMIN"/>
</user-service>

身份验证提供者定义如下:

<beans:bean id="samlAuthenticationProvider" class="org.springframework.security.saml.SAMLAuthenticationProvider">
        <!-- OPTIONAL property: can be used to store/load user data after login -->
        <!--
        <beans:property name="userDetails" ref="bean" />
        -->
</beans:bean>

我收到以下异常:

无法将“java.lang.String”类型的值转换为所需类型 'org.springframework.security.saml.userdetails.SAMLUserDetailsS​​ervice' 对于属性'userDetails'

请帮助解决同样的问题。我将非常感激。

提前致谢

【问题讨论】:

    标签: java spring spring-security saml-2.0 spring-saml


    【解决方案1】:

    在这里找到解决方案 https://github.com/spring-projects/spring-security/issues/2163

    只需要在身份验证管理器中使用 id 而不是别名

    您不需要使用 Spring bean。如果您不指定 ID, 您将覆盖“默认”实例。差不多就是这样 标准 Spring bean 工作。在引用的线程中,用户是 指定别名,而不是 ID,因此不会创建 单独的实例。这也是普通 bean 实例的工作方式,所以 我不确定我们是否应该偏离这一点。

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多