spring-security 使用自定义用户名和密码查询进行Spring Security JDBC身份验证

6jygbczu  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(172)

我是Spring Security的新手,并尝试在我的应用程序中实现它。数据库已经建立,并且具有与默认模式不同的模式。密码已经用Oracle DB哈希方案进行了哈希。
我的问题就在这里。我希望能够通过自定义查询来获取用户名,并在与数据库中的内容进行比较之前获得传入的密码。我该如何做呢?

v8wbuo2f

v8wbuo2f1#

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

}

相关问题