前言
提示:这里可以添加本文要记录的大概内容:
Spring Security是主要解决认证(Authenticate)和授权(Authorization)的框架。
提示:以下是本篇文章正文内容,下面案例可供参考
一、使用步骤
1.添加依赖
在Spring Boot项目中,添加spring-boot-starter-security
依赖项。
注意:以上依赖项是带有自动配置的,一旦添加此依赖,整个项目中所有的访问,默认都是必须先登录才可以访问的,在浏览器输入任何此服务的URL,都会自动跳转到默认的登录页面。
默认的用户名是user
,默认的密码是启动项目时自动生成的随机密码,在服务器端的控制台可以看到此密码。当登录后,会自动跳转到此前尝试访问的页面。
Spring Security默认使用Session机制保存用户的登录状态,所以,重启服务后,登录状态会消失。在不重启的情况下,可以通过 /logout
访问“退出登录”页面,确定后也可以清除登录状态。
2. 关于BCrypt
在Spring Security中,内置了BCrypt算法的工具类,此工具类可以实现使用BCrypt算法对密码进行加密、验证密码的功能。
BCrypt算法使用了随机盐,所以,多次使用相同的原文进行加密,得到的密文都将是不同的,并且,使用的盐值会作为密文的一部分,也就不会影响验证密码了。
重点:在Spring Security框架中,定义了PasswordEncoder
接口,表示“密码编码器”,并且使用BCryptPasswordEncoder
实现了此接口。
3.创建PasswordEncoder对象
通常,应该自定义配置类,在配置类中使用@Bean
方法,使得Spring框架能创建并管理PasswordEncoder
类型的对象,在后续使用过程中,可以自动装配此对象。
在根包下创建config.SecurityConfiguration
类:
@Configuration
@Slf4j
public class SecurityConfiguration {
@Bean
public PasswordEncoder passwordEncoder(){
log.info("创建密码编码器:BCryptPasswordEncoder");
return new BCryptPasswordEncoder();
}
}
然后,在需要使用此对象的类中,自动装配即可,例如,在AdminServiceImpl
类中添加:
@Autowired
private PasswordEncoder passwordEncoder;
在此类中,就可以使用到以上属性,例如:
String rawPassword = admin.getPassword();
String encodedPassword = passwordEncoder.encode(rawPassword);
admin.setPassword(encodedPassword);
注意:一旦在Spring容器中已经存在PasswordEncoder
对象,Spring Security会自动使用它,所以,会导致默认的随机密码不可用(你提交的随机密码会被加密后再进行对比,而Spring Security默认的密码并不是密文,所以对比会失败)。