壹.Spring-Security登录功能
一.简介
1.使用Spring-Security实现登录,即安全管理;
2.一个项目一般都会有登录功能,我们之前编写的登录功能非常简陋,不能用于实际开发,
Spring-Security提供了专业的实现登录的方式,供我们使用。
二.基本使用
1.导入依赖
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- Spring Security Test -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
2.启动服务
1.在启动服务的控制台信息中会包含一个随机产生的密码
用于登录Spring-Security框架
用默认的用户名是"user"
密码赋值控制台出现的,粘贴登录即可
3.自己设置密码
1.我们不想用它提供的用户名和密码,就可以自己设置
# Spring-Security配置用户名密码
spring.security.user.name=admin
spring.security.user.password=123456
4.使用BCrypt加密规则
1.实际开发中,一定不可能在任何位置保存明文密码
将用户的密码经过加密之后再保存,能够最大限度的提高密码的安全级别
而加密的过程不需要我们编写,使用现成的加密规则即可
2.我们使用BCrypt的加密规则
首先我们新建一个包,cn.tedu.straw.portal.security
配置类SecurityConfig,在这个类中注入加密对象
代码如下
//@Configuration表示当前类是配置类,可能向Spring容器中注入对象
@Configuration
public class SecurityConfig {
//注入一个加密对象
@Bean//注解方法,注入对象的注解
public PasswordEncoder passwordEncoder(){
//这个加密对象使用BCrypt加密内容
return new BCryptPasswordEncoder();
}
}
5.测试
1.下面进行测试,测试加密功能和验证功能
代码如下
@SpringBootTest
public class SecurityTest {
@Autowired
PasswordEncoder passwordEncoder;
@Test
public void encodeTest(){
/*
测试加密功能
每次运行加密结果不同
是因为加密对象采用了"随机加盐"技术,提高安全性
*/
String pwd=passwordEncoder.encode("123456");
System.out.println(pwd);
//$2a$10$0WTDZPEUWKW.K5jZ.P4TOuoYqAIKv4jmqFgQZnf9qWCvUHhE9l.8a
}
@Test
public void matchTest(){
/*
测试验证功能
验证我们输入的密码是不是能匹配生成的密文
*/
boolean b=passwordEncoder.matches("123456",
"$2a$10$0WTDZPEUWKW.K5jZ.P4" +
"TOuoYqAIKv4jmqFgQZnf9qWCvUHhE9l.8a");
System.out.println(b);
}
}
6.修改加密后的密码
1.修改application.properties文件中配置的密码
# Spring-Security配置用户名密码
spring.security.user.name=admin
spring.security.user.password=$2a$10$IHMiKBqpiPFYgRg4P0E0HeU.xdkr1nw0/y1AWKIvHh5TMNwxVuBRW
2.测试登录…
7.简化操作
1.上面的操作可以简化
将一个Spring内置的算法标记标注在application.properties文件的密文密码前
代码如下
# Spring-Security配置用户名密码
spring.security.user.name=admin
spring.security.user.password={bcrypt}$2a$10$IHMiKBqpiPFYgRg4P0E0HeU.xdkr1nw0/y1AWKIvHh5TMNwxVuBRW
2.安照上面的配置,我们刚刚注入的PasswordEncoder对象就可以省略了
//注入一个加密对象(密码中设定了算法ID下面的注入就省略了!)
/*@Bean
public PasswordEncoder passwordEncoder(){
//这个加密对象使用BCrypt加密内容
return new BCryptPasswordEncoder();
}*/