第一章:Spring Security(五):Security登陆的超简单例子

文章目录

 

第一节:SpringSecurity(一)入门学习规划

第二节:SpringSecurity(二):SpringSecurity入门

第三节:Spring Security(三):Security中重要的几个类

第四节:Spring Security(四):Security的第一次资源访问流程

第五节:Spring Security(五):Security登陆的超简单例子

第六节:Spring Security(六):Security登录的用户名和密码的校验逻辑


在弄明白第一次资源访问流程后,我准备尝试去写一个登陆流程,关于登陆流程这块比较简单,所以我想写一个能够快速上手的小示例。

 

文章目录

 


前言

登陆流程核心类是UserDetailsService接口,所以根据登录流程,我从UserDetailsService入口来自定义登录流程。


 

一、登录流程

1. 根据用户名查找用户

     Spring Security会根据UserDetailsService的loadUserByUsername方法,根据传递的参数username获取用户信息。

2.校验密码的合法性

     Spring Security会将传过来的密码和查询到的用户信息中的密码放到一个密码器中进行校验,校验成功则登录成功,否则登录失败。

二、使用步骤

1.创建UserDetailsService实现类

@Service
public class UserServiceImpl  implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if (!"user".equals(username)){
            throw new UsernameNotFoundException("用户名不存在");
        }
        String password = new BCryptPasswordEncoder().encode("user");
        return new User(username, password, AuthorityUtils.createAuthorityList());
    }
}

2.构建User对象

构建User对象,如上图,需要三个参数,Username, password和权限,权限我们使用AuthorityUtils来进行创建。

 

3.PasswordEncoder的作用

Spring Security在使用密码器的时候,是在Spring的IOC容器里面获取的,上面的代码明显是new出来的密码器对象,所以在进行登录操作时,后台会报错。

4.解决办法

将PasswordEncoder对象放到容器中

@Configuration
public class SecurityConfig {

    @Bean
    public PasswordEncoder getPasswordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

修改UserDetailsService实现类

@Service
public class UserServiceImpl  implements UserDetailsService {
    @Autowired
    PasswordEncoder passwordEncoder;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if (!"user".equals(username)){
            throw new UsernameNotFoundException("用户名不存在");
        }
        String password = passwordEncoder.encode("user");
        return new User(username, password, AuthorityUtils.createAuthorityList());
    }
}

总结

本次学习,主要掌握Spring Security的登录编程逻辑。

1. 需要掌握UserDetailsService类的用处

2. 需要掌握PasswordEncoder类的用法(这个可以去看下源码)

3. 需要将PasswordEncoder类交给Spring容器来管理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值