Java 如何将bean从xml连接到@Component?

Java 如何将bean从xml连接到@Component?,java,spring,jakarta-ee,spring-security,Java,Spring,Jakarta Ee,Spring Security,我正在尝试自定义一个预验证身份验证提供程序类以扩展逻辑: @Component("superAuthenticaionProvider") public class SuperAuthenticaionProvider extends PreAuthenticatedAuthenticationProvider{ // this is inherited from PreAuthenticatedAuthenticationProvider /*private Authenti

我正在尝试自定义一个
预验证身份验证提供程序
类以扩展逻辑:

@Component("superAuthenticaionProvider")
public class SuperAuthenticaionProvider extends PreAuthenticatedAuthenticationProvider{

    // this is inherited from PreAuthenticatedAuthenticationProvider
    /*private AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken> preAuthenticatedUserDetailsService;*/

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        .......
    }
}
自定义身份验证提供商

<sec:authentication-manager alias="authenticationManager">
    <sec:authentication-provider ref='preAuthenticatedAuthenticationProvider'/>
</sec:authentication-manager>
<bean id="preAuthenticatedAuthenticationProvider"
    class="org.myapps.save.the.world.SuperAuthenticaionProvider">
    <property name="preAuthenticatedUserDetailsService" 
    ref="preAuthenticatedUserDetailsService"/>
</bean>

例外情况是必须设置AuthenticationUserDetails服务 这意味着,
preAuthenticatedUserDetailsService
无法注入到类中,但显然它位于
安全上下文.xml

甚至我在
AuthenticationProvider
类中将
AuthenticationUserDetailsService
设置为
@Autowired

    @Autowired
    private AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken> 
                preAuthenticatedUserDetailsService;
@Autowired
私有身份验证UserDetailsService
预认证数据详细服务;
它仍然给我同样的错误 我错过了什么


谢谢

我认为在使用身份验证提供者的预验证之前,您需要设置AuthenticationUserDetails服务。您能提供更多自定义身份验证提供程序的代码吗?正如博士所说:

此身份验证提供程序不会对执行任何检查 身份验证*请求,因为它们应该已经存在 预认证。但是,*AuthenticationUserDetails服务 例如,实现仍然可能抛出UsernameNotFoundException 例如


谢谢是的,就是这样。但是如何在身份验证提供程序
之前启动
authenticationUserDetails服务
?我看到
preauthenticationDauthenticationProvider
有一个名为
setPreauthenticationDuserDetails服务
的方法,它将用户详细信息服务bean作为参数?也许你能在上面找到些什么,对。我认为这应该使
preAuthenticatedUserDetailsService
字段限定为autowire的bean。所以我在问题的xml中设置了它。但仍然得到同样的例外。奇怪的
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: An AuthenticationUserDetailsService must be set
Caused by: java.lang.IllegalArgumentException: An AuthenticationUserDetailsService must be set
at org.springframework.util.Assert.notNull(Assert.java:112)
at org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider.afterPropertiesSet(PreAuthenticatedAuthenticationProvider.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)
... 26 more
    @Autowired
    private AuthenticationUserDetailsService<PreAuthenticatedAuthenticationToken> 
                preAuthenticatedUserDetailsService;