码迷,mamicode.com
首页 > 编程语言 > 详细

spring security 的校验逻辑

时间:2018-05-20 10:42:57      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:cli   spring容器   情况下   ble   boolean   str   重写   ebs   数据   

通过以下三个接口来理一下spring security (下称ss)的校验逻辑。

  1. 处理用户信息获取逻辑 UserDetailsService
  2. 处理用户校验逻辑 UserDetails
  3. 处理密码加密解密 PasswordEncoder
public interface UserDetailsService {
    UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;
}

实现UserDetailsService接口,重写loadUserByUsername方法。ss会调用这个方法(当然你得把实现类交给spring容器来管理,以保证ss在需要调用的时候能找到),loadUserByUsername会返回一个封装了用户名、密码以及权限信息,还有密码是否过期等信息的UserDetails对象。
参见UserDetails接口:

  public interface UserDetails extends Serializable {
    Collection<? extends GrantedAuthority> getAuthorities();
    String getPassword();
    String getUsername();
    boolean isAccountNonExpired();
    boolean isAccountNonLocked();
    boolean isCredentialsNonExpired();
    boolean isEnabled();
  }

ss会拿着这些信息(来自内存或者来自数据库)与client端传过来的账号密码进行比对。
一般情况下,当注册密码时,我们需要对原始密码进行加密。
我们知道,加密密码时,我们的加密器都是自动注入到IOC容器的。如下

  @Autowired
  private PasswordEncoder passwordEncoder;

那么,加密器来自于哪儿呢?
我们需要在配置类中(BrowserSecurityConfig extends WebSecurityConfigurerAdapter)配置一个加密器。

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

一旦你把加密器交给spring,ss就能在适当时候使用该加密器(如加密从client拿到的原始密码,然后与userdetails中的密码比对)。

spring security 的校验逻辑

标签:cli   spring容器   情况下   ble   boolean   str   重写   ebs   数据   

原文地址:https://www.cnblogs.com/DongXuefeng/p/9062382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!