我看过很多这样的例子:用户创建一个自定义的UserDetailsService
,以覆盖loadUserByUsername
方法并返回一个UserDetails
对象的自定义实现。
这是以前用类似这样的东西做的
@Override
public void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
authenticationManagerBuilder.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
现在有了新版本,我对如何做到这一点感到困惑
我创建了一个Bean
并使用了JdbcUserDetailsManager
,我可以为用户和权限表配置自定义查询
@Bean
public UserDetailsManager userDetailsManager(DataSource dataSource) {
String usersByUsernameQuery = "select username, password, enabled from tbl_users where username = ?";
String authsByUserQuery = "select username, authority from tbl_authorities where username = ?";
JdbcUserDetailsManager userDetailsManager = new JdbcUserDetailsManager(dataSource);
userDetailsManager.setUsersByUsernameQuery(usersByUsernameQuery);
userDetailsManager.setAuthoritiesByUsernameQuery(authsByUserQuery);
return userDetailsManager;
}
但是如何返回一个带有额外字段的自定义UserDetails
对象,例如带有新版本的电子邮件?
1条答案
按热度按时间xoshrz7s1#
好的,经过多次尝试,我所做的是从我的自定义
SecurityConfig
类中完全删除JdbcUserDetailsManager
的东西,我创建了一个自定义UserDetailsService
和自定义UserDetails
类,它工作了。所以安全配置类没有关于用户身份验证的代码。我很困惑,因为我认为我必须在配置类中创建一个
@Bean
,自己实现身份验证,通常所有的身份验证代码都必须在配置类中完成,但它使用这种方法工作。而细节类
同时检查Spring Security Architecture