目录
Spring Security 框架默认的认证业务逻辑是不能满足我们产品或项目的需求的,这时候如果我们使用Spring Security 框架就需要自定义用户认证逻辑。
自定义认证逻辑,我们需要关心几个问题:
- 如何处理获取用户信息
- 如何处理校验用户信息
- 如何处理密码加密解密
Spring Security自定义认证逻辑
1.如何处理获取用户信息
Spring Security 提供了UserDetailsService 接口,用来处理用户信息获取,我们只要实现这个接口
,对loadUserByUsername方法进行实现,返回UserDetails 对象即可,在这个方法中,我们可以通过username字段(帐号)去数据库查找相应的用户信息。
public interface UserDetailsService {
UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
}
2.如何处理校验用户信息
同样用户校验信息,Spring Security 提供了UserDetails接口,Spring Security 对 UserDetails接口有默认实现User,我们直接使用它提供的即可
public interface UserDetails extends Serializable {
Collection<? extends GrantedAuthority> getAuthorities();
/**
* 密码
*/
String getPassword();
/**
* 帐号
*/
String getUsername();
/**
* 账户是否过期
*/
boolean isAccountNonExpired();
/**
* 用户是否被锁定
*/
boolean isAccountNonLocked();
/**
* 用户是否已过期
*/
boolean isCredentialsNonExpired();
/**
* 用户是否被禁用
*/
boolean isEnabled();
}
3.如何处理密码加密解密
Spring Security 提供了 PasswordEncoder 接口,来处理密码加密和匹配问题。密码加密使我们来调用的,如果在用户注册的是有没有调用会密码匹配不上。
public interface PasswordEncoder {
/**
* 这个方法当用户注册的时候调用
*/
String encode(CharSequence rawPassword);
/**
* 这个方法是使用登录输入的密码和用户真正的使用的密码进行匹配
*/
boolean matches(CharSequence rawPassword, String encodedPassword);
}
Spring Security 自定义认证步骤
我的环境
- SpringBoot 2.0.8
- Spring Security 5.0.11
- JDK 1.8
- Eclipse 4.11.0
- Maven 3.5.4
- Windows 10
项目结构
项目pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.com.witsystem</groupId>
<artifactId>security</artifactId>
<version</