zoukankan      html  css  js  c++  java
  • 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");
    }
    
  • 相关阅读:
    如何发现需求
    测试linux和window下 jdk最大能使用多大内存
    java获取汉字的拼音 简单版
    oracle一条sql执行导入sql文件
    oracle使用闪回功能恢复删除的表数据
    linux环境变量配置
    有两张表;使用SQL查询,查询所有的客户订单日期最新的前五条订单记录。 糖不苦
    jQuery作业 点击出弹框 糖不苦
    #{}和${}的区别是什么? 糖不苦
    在html页面中如何使用jQuery? 糖不苦
  • 原文地址:https://www.cnblogs.com/liweiwei1419/p/6794409.html
Copyright © 2011-2022 走看看