Spring Boot 集成 Spring Security 使用自定義的安全數據源


編寫一個類自定義實現 UserDetailsService 接口

@Service("customUserDetailService")
public class CustomUserDetailService implements UserDetailsService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        System.out.println("在 CustomUserDetailService 傳入的 username => " + username);

        com.liwei.entity.User user = userRepository.findByUserName(username);
        List<GrantedAuthority> authorities = new ArrayList<>();
        authorities.add(new SimpleGrantedAuthority("ROLE_USER"));
        User securityUser = new User(user.getUserName(), user.getPassword(), authorities);
        return securityUser;
    }
}

指定裝配 UserDetailsService

@Autowired
@Qualifier("customUserDetailService")
private UserDetailsService userDetailsService;

配置 userDetailsService

auth.userDetailsService(userDetailsService)

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.userDetailsService(userDetailsService)
            .passwordEncoder(new PasswordEncoder() {
                /**
                 * 這個方法的注釋我不知道應該怎樣寫,含義是提供一個加密的算法?
                 *
                 * @param rawPassword
                 * @return
                 */
                @Override
                public String encode(CharSequence rawPassword) {
                    return encoder.encode(rawPassword.toString());
                }

                /**
                 * 提供一個匹配的算法
                 *
                 * @param rawPassword 用戶輸入的密碼
                 * @param encodedPassword "數據庫"中的密碼,可以理解為安全數據源的密碼
                 * @return
                 */
                @Override
                public boolean matches(CharSequence rawPassword, String encodedPassword) {
                    return encoder.matches(rawPassword, encodedPassword);
                }
            });
            //.withUser("liwei").password("c019306df0757d86de9a14c1033fb80d84fa77f13edc4ff985dacac612043657a0246bd8e6b3ebab").roles("USER").and()
            //.withUser("zhouguang").password("2f4353cc3b8bc0fbde0a6aad1a438dec110c3362b33e0804e95e6f3368e80625fdd5dd2aacdcdf32").roles("USER", "ADMIN");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM