java - 是否可以有 2 个 UserDetailsService(每个 WebSecurityConfigurerAdapter 一个)?
问题描述
我需要 2 个登录页面,并且都应该从数据库中查找登录信息。按照我的理解,这意味着:
- 我需要 2 个扩展 WebSecurityConfigurerAdapter 的类
- 由于我需要从数据库(2 个不同的表)中查找信息,我需要 2 个实现 UserDetailsService 的类。
我试过这样做,但是当我有两个具有实现 UserDetailsService 的类的 Bean 时,看起来两者都没有使用(我还尝试在其中一个安全类中只使用 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;
}
(另一个 WebSecurityConfigureAdapter 有 @Order(1) 注释)
解决方案
事实证明,将它添加到安全类有助于:
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(customUserDetailsService);
}
(如果有多个UserDetailsService,它似乎无法自动选择同一安全类中的Autowired)
推荐阅读
- c# - .nettiers 数据源不对查询应用过滤器
- alert - bosun 从不发送未知通知
- wpf - Avalonia Ui 相当于 ImageResource
- c# - Console.Writeline 变量中的转义字符
- c# - .NET HttpClient 的 Http 连接变慢或死锁
- amazon-web-services - 从 cloudformation 堆栈中检索 lambda 函数的 arn
- reactjs - 两个 FlatList 之一未在同一组件中呈现项目
- jpa - @Transactional 和可序列化级别问题
- netbeans-8 - NetBeans - 在保存时用空格替换选项卡
- javascript - 如何使用 axios 拦截器?