spring-security-learn002自定义用户

自定义UserDetailsManager

根据之前的图说明,UserDetails是由他管理的。所以我们自定义来覆盖

它有两个实现类:
在这里插入图片描述

我们简化问题,首先使用InMemoryUserDetailsManager。

@Configuration
public class SecurityConfig {
    @Bean
    public UserDetailsManager userDetailsManager(){
        var udm = new InMemoryUserDetailsManager();
        return udm;
    }
}

当前还没有UserDetails

添加UserDetails

UserDetails接口的实现:
在这里插入图片描述
两个类,一个接口,我们使用第三个:User。

User有构造器提供我们使用,但更方便的是通过构建者对象构建

 var uds = User.withUsername("dao")
         .password("123")
         .build();

让UserDetailsManager管理UserDetails

现在二者还没有联系,如何产生联系:

udm.createUser(uds);

授权错误

现在启动应用会报错:

Caused by: java.lang.IllegalArgumentException: Cannot pass a null GrantedAuthority collection

必须指定Authority。

指定授权

 @Bean
 public UserDetailsManager userDetailsManager(){
     var udm = new InMemoryUserDetailsManager();
     var uds = User.withUsername("dao")
             .password("123")
             .authorities("read")
             .build();
     udm.createUser(uds);
     return udm;
 }

现在启动不会有随机密码了,我们有自己指定的用户了。

密码编码错误

现在用 dao , 123登录会出现错误:

java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id “null”

添加密码编码器

PasswordEncoder有许多实现者,我们先用最简单的(虽然已过时),原始密码不加密,这个仅仅用于实验阶段,不能使用在生产环境。

 @Bean
 public PasswordEncoder passwordEncoder() {
     return NoOpPasswordEncoder.getInstance();
 }

现在登录则不会再报错了。

添加更多的用户

@Bean
  public UserDetailsManager userDetailsManager(){
      var udm = new InMemoryUserDetailsManager();
      var uds = User.withUsername("dao")
              .password("123")
              .authorities("read")
              .build();

      var uds2 = User.withUsername("king")
              .password("123")
              .authorities("read","write")
              .build();
      udm.createUser(uds);
      udm.createUser(uds2);
      return udm;
  }

现在你使用 king 123登录当然也是OK的。

源码

https://github.com/qiudaozhang/spring-security-learn002

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

singkingcho

有帮助?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值