美文网首页
Spring Security Authentication

Spring Security Authentication

作者: 司鑫 | 来源:发表于2018-09-24 20:15 被阅读20次

认证授权原理


Spring Security核心就是一系列的过滤器链,当一个请求来的时候,首先要通过filer chains 的校验,每种校验方式 Spring security 都提供了对应的 filter,校验通过之后才会访问用户各种信息。

发送一个 request 时:

  1. 进入到 UsernamePasswordAuthenticationFilter 这个 filter 中,判断是否时表单认证,如果是则会进行校验,并做相应的标志
  2. 进入到 basicAuthenticationFilter 这个 filter 中,判断是否是 basic 的认证方式,如果是则会进行校验并做相应的标志
  3. 经过一系列其他的 filter ,比如 authorization ...
  4. 进入到 FilterSecurityInterceptor 这个 filter,校验用户是否有认证成功/认证成功后是否有相应的权限,如果没有则会进入到 ExceptionTranslationFilter 中转换成相应的 exception 并返回;如果校验成功,则会访问 request

自定义认证逻辑


用户信息获取及校验逻辑
  1. 自定义获取用户的逻辑,实现 UserDetailsService 接口,并实现 loadUserByUsername 接口;
@Component
public class CustomUserDetailsService implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserInfo userInfo = new UserInfo();// 可以从数据库中根据 username 获取用户信息以及对应的权限
        return userInfo;
    }
}
  1. 其中需要返回一个UserDetails 的实例,我们可以直接返回一个 Spring security 提供好的一个实例org.springframework.security.core.userdetails.User, 也可以实现 UserDetails 接口自定义一个UserDetails实例。
public class UserInfo implements UserDetails{

    private Long id;

    private String name;

    private String username;

    private String password;

    private String email;

    private boolean isAccountNonExpired = true;

    private boolean isAccountNonLocked = true;

    private boolean isCredentialsNonExpired = true;

    private boolean isEnabled = true;
}
处理密码加密逻辑

Spring Security 提供了几种默认的加密方法,比如:MD5,盐... ,我们也可以通过实现PasswordEncoder接口并实现 encodematches 方法来自定义一个加密方式。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

相关文章

网友评论

      本文标题:Spring Security Authentication

      本文链接:https://www.haomeiwen.com/subject/yrxcoftx.html