系列二、Spring Security中的核心类

一、Spring Security中的核心类

1.1、自动配置类

UserDetailsServiceAutoConfiguration

1.2、密码加密器

1.2.1、概述

        Spring Security 提供了多种密码加密方案,官方推荐使用 BCryptPasswordEncoder,BCryptPasswordEncoder 使用 BCrypt 强哈希函数,开发者在使用时可以选择提供 strength 和 SecureRandom 实例。strength 越大,密钥的迭代次数越多,密钥迭代次数为 2^strength。strength 取值在 4~31 之间,默认为 10。不同于 Shiro 中需要自己处理密码加盐,在 Spring Security 中,BCryptPasswordEncoder 就自带了盐,处理起来非常方便。而 BCryptPasswordEncoder 就是 PasswordEncoder 接口的实现类。

1.2.2、PasswordEncoder

public interface PasswordEncoder {
	/*
	 * encode 方法用来对明文密码进行加密,返回加密之后的密文
	 */
    String encode(CharSequence var1);
	
	/*
	 * matches方法是一个密码校对方法,在用户登录的时候,将用户传来的明文密码和数据库中保存的密文密码作为参数,
	 * 传入到这个方法中去,根据返回的 Boolean 值判断用户密码是否输入正确
	 */	
    boolean matches(CharSequence var1, String var2);

	/*
	 * upgradeEncoding 是否还要进行再次加密,这个一般来说就不用了
	 */	
    default boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}

1.3、UserDetailService

1.3.1、概述

        Spring Security支持多种数据源,例如内存、数据库、LDAP等,这些不同来源的数据被共同封装成了UserDetailService接口,换句话说任何实现了UserDetailService接口的对象都可以作为认证数据源,因为我们还可以通过重写WebSecurityConfigurerAdapter 中的 userDetailsService 方法来提供一个 UserDetailService 实例进而配置多个用户。

1.3.2、继承结构(基于spring-boot-starter-security:2.3.2.RELEASE)

1.4、UsernamePasswordAuthenticationFilter

1.4.1、概述

        处理用户名/密码的核心类。

1.4.2、部分核心源码

1.5、Authentication 

1.5.1、概述

        Authentication是Spring Security中一个非常重要的对象,我们可以在任何地方注入 Authentication 进而获取到当前登录用户信息,Authentication 本身是一个接口,它实际上是对 java.security.Principal 做了进一步的封装。

1.5.2、源码

public interface Authentication extends Principal, Serializable {
	
	Collection<? extends GrantedAuthority> getAuthorities();
	
	Object getCredentials();
	
	Object getDetails();
	
	Object getPrincipal();
	
	boolean isAuthenticated();

	void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException;
}

1.6、AuthenticationProvider 

1.6.1、概述

        AuthenticationProvider 定义了 Spring Security 中的验证逻辑。

1.6.2、源码

public interface AuthenticationProvider {

 Authentication authenticate(Authentication authentication) throws AuthenticationException;
 
 boolean supports(Class<?> authentication);
 
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值