是否可以有2个UserDetailsS​​ervice(每个WebSecurityConfigurerAdapter一个)?

时间:2018-08-10 08:08:20

标签: java spring spring-security

我需要2个登录页面,并且都应该从数据库中查找登录信息。据我了解,这意味着:

  1. 我需要2个扩展WebSecurityConfigurerAdapter的类
  2. 因为我需要从数据库(2个不同的表)中查找信息,所以我需要2个实现UserDetailsS​​ervice的类。

我尝试这样做,但是当我有两个带有实现UserDetailsS​​ervice的类的Bean时,看起来两者都没有使用(我还尝试仅在其中一个Security类中使用UserDetailsS​​ervice,并且都定义了两个UserDetailsS​​ervices )。每个类如下:

@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String user) throws UsernameNotFoundException {
      /* ..... */
    }
}

然后我自动装配WebSecurityConfigurerAdapter:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        /* filter */
    }

    @Autowired
    CustomUserDetailsService customUserDetailsService;    
}

(另一个WebSecurityConfigureAdapter具有@Order(1)注释)

1 个答案:

答案 0 :(得分:0)

事实证明,将其添加到安全性类有助于:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(customUserDetailsService);
}

(如果有多个UserDetailsS​​ervice,则似乎无法自动选择同一安全级别中的自动连线)