我是Spring Security的新手,并尝试在我的应用程序中实现它。数据库已经建立,并且具有与默认模式不同的模式。密码已经用Oracle DB哈希方案进行了哈希。我的问题就在这里。我希望能够通过自定义查询来获取用户名,并在与数据库中的内容进行比较之前获得传入的密码。我该如何做呢?
v8wbuo2f1#
您可以通过实现自定义UserDetailsService并重写其loadUserByUsername()方法来自定义身份验证逻辑。
UserDetailsService
loadUserByUsername()
public interface MembersService extends UserDetailsService {} @Service public class MembersServiceImpl implements MemberService{ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //custom logic to authenticate throw new UsernameNotFoundException("User '" + username + "' not found"); } }
在安全配置中设置此自定义用户详细信息服务
@Configuration public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { private MembersService memberService; public WebSecurityConfiguration(MembersService memberService) { this.memberService = memberService; } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(this.memberService).passwordEncoder(encoder()); } }
1条答案
按热度按时间v8wbuo2f1#
您可以通过实现自定义
UserDetailsService
并重写其loadUserByUsername()
方法来自定义身份验证逻辑。在安全配置中设置此自定义用户详细信息服务