提问者:小点点

有没有可能有2个UserDemailsService(每个WebSecurityCon的一个适配器)?


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

  1. 我需要2个扩展WebSecurityConfigurerAdapter的类
  2. 由于我需要从数据库(两个不同的表)中查找信息,所以我需要两个实现UserDetailsService的类

我尝试这样做,但是当我有两个带有实现UserDetailsService的类的Beans时,看起来两者都没有使用(我也尝试只在其中一个安全类中使用UserDetailsService,并且定义了两个UserDetailsServices)。每个类如下所示:

@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;    
}

(另一个WebSecurityCon的适配器有@的顺序(1)注解)


共1个答案

匿名用户

事实证明,将此添加到安全类中有所帮助:

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

(如果有多个UserDetailsService,它似乎无法自动选择同一安全类中的Autowired)