前言
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。它是保护基于 Spring 的应用程序的事实标准。
Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。像所有 Spring 项目一样,Spring Security 的真正强大之处在于它可以轻松扩展以满足自定义需求。
一、Spring Security是什么?
Spring Security主要解决了认证和授权相关的问题。 认证:验证用户提交的登录信息,判断是否可以通过。 授权:当认证通过后,给予通过认证的用户一些信息,后续,将根据这些信息来判断此用户是否允许执行某些访问。
二、使用步骤
1.添加依赖
在项目的pom文件中添加下面这段依赖:
<!-- Spring Boot Security,用于处理认证与授权 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
2.测试使用
这里我们会用到其中的一个算法用于测试:
BCrypt算法是一种基于哈希算法的算法,所以,这种算法也是不可逆的! 通过BCrypt算法进行编码后的结果,长度固定为60字符。 使用同一个原文进行反复编码,每次得到的结果都是不同的,因为在编码过程中,BCrypt使用了随机的盐,并且,使用的盐也作为编码结果的一部分保存了下来。 在开发实现中,通常,可以使用配置类中的`@Bean`方法来创建`BCryptPasswordEncoder`对象,此对象将是由Spring进行管理的,当需要使用时,自动装配即可,例如:
代码如下(示例):
@Slf4j
@SpringBootTest
public class BCryptTest {
@Test
public void testBcrypt(){
String password="123456";
BCryptPasswordEncoder bshScriptEvaluator=new BCryptPasswordEncoder();
String encodedPassword=bshScriptEvaluator.encode(password);
log.info("原文密码{},密文密码{}",password,encodedPassword);
}
}
3.运行结果
我们可以使用循环语句来看多次说出的结果:
4.密码匹配测试
@Test
public void testMatches() {
String rawPassword = "123456";
String encodedPassword = "$2a$10$7XYJc3DSotqjZ4Z6ZFpQ7OIdLQIWc8s2ATh5bSFPKq6dVUwHRlRly";
BCryptPasswordEncoder bshScriptEvaluator=new BCryptPasswordEncoder();
boolean matches = bshScriptEvaluator.matches(rawPassword, encodedPassword);
log.info("原文={},密文={},匹配结果={}", rawPassword, encodedPassword, matches);
}
我们用之前生成的密文密码用来与原文密码进行匹配,看看是否能够匹配成功呢?
总结
Spring Security框架是目前认证和授权的主流应用框架,用以划分用户管理员权限,自身也提供BCrypt算法用于密码的加密处理和Matches方法用于密码匹配,并且这种算法更加安全。