Spring安全认证提供程序java配置

Joh*_*ohn 4 spring spring-security

我已经实现了自己的UserDetailsS​​ervice.我在java中配置spring security.如何使用自定义用户服务详细信息服务和一些密码编码器创建默认身份验证提供程序?

最先感谢最好的问候编辑:这是我尝试的:这是我的用户详细信息服务impl的一部分:

public class UserDetailsServiceImpl implements UserDetailsService 
Run Code Online (Sandbox Code Playgroud)

后来在我的安全配置中我有这样的事情:

@Bean
public UserDetailsServiceImpl userDetailsService(){
    return new UserDetailsServiceImpl();
}


@Bean
public AuthenticationManager authenticationManager() throws Exception{
    return auth.build();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    auth.userDetailsService(userDetailsService()).passwordEncoder(passwordEncoder);
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,我有异常:

Caused by: java.lang.IllegalArgumentException: Can not set com.xxx.UserDetailsServiceImpl field com.....MyAuthenticationProvider.service to com.sun.proxy.$Proxy59
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81)
    at java.lang.reflect.Field.set(Field.java:741)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:504)
    ... 58 more
Run Code Online (Sandbox Code Playgroud)

我想我做错了什么

ast*_*ome 15

错了,您应按如下方式实施服务:

@Service("authService")
public class AuthService implements UserDetailsService {
Run Code Online (Sandbox Code Playgroud)

之后在配置中使用它:

@Resource(name="authService")
private UserDetailsService userDetailsService;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    ShaPasswordEncoder encoder = new ShaPasswordEncoder();
    auth.userDetailsService(userDetailsService).passwordEncoder(encoder);
}
Run Code Online (Sandbox Code Playgroud)

你绝不应该使用new关键字来实例化bean .