Spring Security统一认证系统实现
1 SpringSecurity 应用
1.1 简介
Spring Security是一个提供安全访问控制解决方案的安全框架
1.2 认证授权分析
1.3 项目实践
1.3.1 系统初始配置
pom文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
1.3.2 自定义密码加密
@Test
void encode(){
//实例化Spring-Security提供的加密对象
//按照BCrypt加密规则执行加密
BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
//将制定字符串(密码)加密为密文字符串的方法如下
String pwd=encoder.encode("aaa");
System.out.println(pwd);
//随机加盐保证每次加密的结果都不同
}
@Test
void match(){
BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
//验证字符串是否匹配加密结果
//参数1:明文密码 参数2:加密后的密码
boolean b=encoder.matches("pwd",
"$2a$10$f8J5ggyndSwp6IFRIEkPtucAlpUpaXFlO4stHt6OudTcM152UQsKW");
System.out.println(b);
}
在application.properties设置加密后的结果,声明算法ID
# Spring-Security设置用户名密码
spring.security.user.name=admin
# Spring-Security设置密码
# 算法ID{
bcrypt}后面跟加密的密码
spring.security.user.password={
bcrypt}$2a$10$f8J5ggyndSwp6IFRIEkPtucAlpUpaXFlO4stHt6OudTcM152UQsKW
1.4 认证逻辑与设计
1.4.1 自定义登录逻辑
SpringSecurity通过UaerDetailsService接口提供用户登录的授权信息
第一步:定义Security的配置类
@Configuration
public class SecutiryConfig {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
第二步:定义UserDetailService接口实现类,自定义登陆逻辑
@Service
public class UserDetailServiceImpl implements UserDetailsService {
@Autowired
private PasswordEncoder passwordEncoder;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
{
if(!"admin".equals(username))
throw new UsernameNotFoundException("user not found");
//从Cookie中查询出来的加密密码
String password=passwordEncoder.encode("pwd");
//从Cookie查询出来的用户信息,第三个参数为用户权限
return new User(username,password,
AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_admin,ROLE_normal,/doRetrieve,/doCreate"));
}
}
1.4.2 自定义登录界面
第一步:定义登录界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">