Spring安全JDBC认证与自定义用户名和密码查询



我是Spring Security的新手,并试图在我的应用程序中实现它。数据库已经建立,并且具有与默认模式不同的模式。密码已使用Oracle数据库散列方案进行了散列。

我的问题就在这里。我希望能够通过自定义查询来获取用户名,并且在将其与数据库中的内容进行比较之前还具有传入密码。我该怎么做呢?

您可以通过实现自定义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());
}
}

最新更新