springSecurity自定义处理器基本配置

加密方式
public PasswordEncoder passwordEncoder() {
   
   
    return new BCryptPasswordEncoder();
}

获得一个加密后的密码存进数据库,用于第一次登录
在这里插入图片描述

设置一些角色

在这里插入图片描述

分配给这个用户系统管理员的角色

在这里插入图片描述

接着需要一个springSecurity能识别的用户类,即一个实体实现UserDetails接口
@Getter
@Setter
@ApiModel(value = "User对象", description = "")
@Builder
public class User implements UserDetails {
   
   
      @TableId(value = "id", type = IdType.AUTO)
      private Integer id;
      @ApiModelProperty("账号")
      private String account;
      private String password;
      @ApiModelProperty("姓名")
      private String name;
      @ApiModelProperty("是否禁用")
      private Boolean disable;
      @ApiModelProperty("邮箱")
      private String mail;
      private Set<String> roles;//用户一登陆会初始化这些参数
      @Override
      public Collection<? extends GrantedAuthority> getAuthorities() {
   
   
            return this.roles.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toSet());
      }
      @Override
      public String getUsername() {
   
   
            return this.account;
      }
      @Override
      public boolean isAccountNonExpired() {
   
   //账号是否没过期
            return true;
      }
      @Override
      public boolean isAccountNonLocked() {
   
   //账号是否没有被锁定
            return true;
      }
      @Override
      public boolean isCredentialsNonExpired() {
   
   //凭证是否没有过期
            return true;
      }
      @Override
      public boolean isEnabled() {
   
   //账号是否能用
            return !this.disable;
      }
}
然后需要一个Service类实现UserDetailsService接口,来重写方法,使SpringSecurity获得登陆人账号密码并校验的能力
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService, UserDetailsService {
   
   

    @Autowired
    UserMapper userMapper;
    @Autowired
    UserRoleMapper userRoleMapper;
    @Autowired
    RoleMapper roleMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
   
   
        if (StringUtils.isBlank(username)) {
   
   //null,""," "都会返回true
            throw new BizException("用户名不能为空!");
        }
        User user = userMapper.selectOne(new LambdaQueryWrapper<User>()
                .select(User::getId, User::getAccount, User::getName, User::getPassword, User::getDisable, User::getMail)
                .eq(User::getAccount, username));
        if(Objects.isNull(user)){
   
   
            throw new BizException("用户名不存在");
        }
        return convertUserDetail(user);
    }

    private UserDetails convertUserDetail(User user) {
   
   //封装登录信息
        List<Object> objectList = userRoleMapper.selectObjs(new LambdaQueryWrapper<UserRole>().select
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值