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;