• 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");
    }
    
  • 相关阅读:
    方法:常用SQL时间格式
    讨论:C#Calendar赋初始值
    解释:C++虚函数
    方法:C#用session做登陆
    方法:C#在WinForm中如何将Image存入SQL2000和取出显示
    从请求管道深入剖析HttpModule的实现机制,有图有真相
    偶然在网上看到的题目,jQuery功底如何一测便知晓!!!!!!
    MVC2.0中的HtmlHelper大全
    九度 题目1500:出操队形
    九度 题目1528:最长回文子串
  • 原文地址:https://www.cnblogs.com/liweiwei1419/p/6794409.html
Copyright © 2020-2023  润新知