如何使用Spring Security命名空间设置和配置ProviderManager?

piok6c0g  于 2023-04-12  发布在  Spring
关注(0)|答案(3)|浏览(203)

Spring文档说ProviderManagerAuthenticationManager的默认实现,但是ProviderManager的示例是由安全命名空间自动创建和连接的吗?
换句话说,这样的配置是否会自动创建ProviderManager的示例:

<authentication-manager>
    <authentication-provider>
       <password-encoder hash="md5"/>
       <jdbc-user-service data-source-ref="dataSource"/>
    </authentication-provider>
</authentication-manager>

否则,我需要做什么(或声明)?
假设我想插入我自己的AuthenticationManager实现,我该如何使用名称空间配置它?
我还想指定应该在ProviderManager中注册哪个AuthenticationProvider。我找到了以下配置代码:

<bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <property name="providers">
        <list>
            <ref local="daoAuthenticationProvider"/>
            <ref local="anonymousAuthenticationProvider"/>
        </list> 
    </property>
</bean>

但是这就足够了吗?什么是正确的方式来声明AuthenticationProvider的列表?文档对这个问题不是很清楚和完整。

ct2axkht

ct2axkht1#

换句话说,这样的配置是否会自动创建ProviderManager的示例:
根据附录B2节,答案是肯定的。
假设我想插入我自己的AuthenticationManager实现,我该如何使用名称空间配置它?
根据第B.3.1节:

<global-method-security authentication-manager-ref="..." >

声明AuthenticationProvider列表的正确方法是什么?
blog post开始,而不是使用<authentication-manager> ... </authentication-manager>,应该使用类似于以下内容的内容:

<bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
    <property name="providers">
        <list>
            <ref bean="authenticationProvider" />
            <ref bean="anonymousProvider" />
        </list>
    </property>
</bean>

<bean id="authenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <property name="passwordEncoder">
        <bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" />
    </property>
    <property name="userDetailsService" ref="userService" />
</bean>

<bean id="anonymousProvider" class="org.springframework.security.authentication.AnonymousAuthenticationProvider">
    <property name="key" value="SomeUniqueKeyForThisApplication" />
</bean>
9gm1akwq

9gm1akwq2#

我使用下面的配置和自定义身份验证提供程序;

<authentication-manager>

        <authentication-provider user-service-ref="myUserDetailsService">
            <password-encoder hash="md5">
                <salt-source user-property="username" />
            </password-encoder>
        </authentication-provider>
    </authentication-manager>

    <beans:bean id="myUserDetailsService" autowire="byType" class="my.user.UserDetailsServiceImpl">
        <beans:property name="userManagementService" ref="userManagementService"></beans:property>
    </beans:bean>
dxpyg8gm

dxpyg8gm3#

这些答案已经过时了。Sprinboot3和Springsecurity 6不再支持这些配置

相关问题