Spring Security--自定义登录逻辑

   自定义登录逻辑

      当进行自定义登录逻辑时需要用到之前讲解的UserDetailsService 和 PasswordEncoder。但是 Spring Security 要求:当进行自定义登录逻辑时容器内必须有 PasswordEncoder 实例。所以不能直接 new 对象

      1 编写配置类

@Configuration
public class MyPasswordEncoder {
    @Bean
    public PasswordEncoder getPassEncoder(){
        return new BCryptPasswordEncoder();
    }
}

      2 自定义逻辑

      在 Spring Security 中实现 UserDetailService 就表示为用户详情服务。在这个类中编写用户认证逻辑

@Service
public class MyLoginServerImpl implements UserDetailsService {

    @Autowired
    private PasswordEncoder encoder;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        //模拟数据库中查不到
        if(!"shouhe".equals(username)){
            throw new UsernameNotFoundException("用户不存在");
        }
        //理解:password 就是数据库中查询出来的密码,查询出来的内容不是 123456
        String pwd = encoder.encode("123456");
        //username 是用户输入的
        // pwd 是数据库查出来的
        // admin的权限
        return new User(username,pwd,AuthorityUtils.commaSeparatedStringToAuthorityList("admin"));
    }
}

       3 查看效果

      重启项目后,在浏览器中输入账号:shouhe,密码:123456。后可以正确进入到 login.html 页面
(密码必须要是123456,因为Spring Security 会将返回的User和你输入的密码做比较,所以如果不输入123456则无法认证成功)

你可能感兴趣的:(Java,demo,SpringSecurity)