1 spring security PasswordEncoder
spring security 5不需要配置密码的加密方式,而是用户密码加前缀的方式表明加密方式,如:
-
{MD5}88e2d8cd1e92fd5544c8621508cd706b
代表使用的是MD5
加密方式; -
{bcrypt}$2a$10$eZeGvVV2ZXr/vgiVFzqzS.JLV878ApBgRT9maPK1Wrg0ovsf4YuI6
代表使用的是bcrypt
加密方式。
spring security官方推荐使用更加安全的bcrypt加密方式。
这样可以在同一系统中支持多种加密方式,迁移用户比较省事。spring security 5支持的加密方式在PasswordEncoderFactories中定义:
public class PasswordEncoderFactories {
public static PasswordEncoder createDelegatingPasswordEncoder() {
String encodingId = "bcrypt";
Map<String, PasswordEncoder> encoders = new HashMap();
encoders.put(encodingId, new BCryptPasswordEncoder());
encoders.put("ldap", new LdapShaPasswordEncoder());
encoders.put("MD4", new Md4PasswordEncoder());
encoders.put("MD5", new MessageDigestPasswordEncoder("MD5"));
encoders.put("noop", NoOpPasswordEncoder.getInstance());
encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
encoders.put("scrypt", new SCryptPasswordEncoder());
encoders.put("SHA-1", new MessageDigestPasswordEncoder("SHA-1"));
encoders.put("SHA-256", new MessageDigestPasswordEncoder("SHA-256"));
encoders.put("sha256", new StandardPasswordEncoder());
return new DelegatingPasswordEncoder(encodingId, encoders);
}
private PasswordEncoderFactories() {
}
}
2 测试
2.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>com.hfcsbc</groupId>
<artifactId>security</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>security</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.M7</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
2.2 测试
spring security 5.x默认使用bcrypt加密
@Slf4j
public class DomainUserDetailsService {
public static void main(String[] args){
PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
String encode = passwordEncoder.encode("password");
log.info("加密后的密码:" + encode);
log.info("bcrypt密码对比:" + passwordEncoder.matches("password", encode));
String md5Password = "{MD5}88e2d8cd1e92fd5544c8621508cd706b";//MD5加密前的密码为:password
log.info("MD5密码对比:" + passwordEncoder.matches("password", encode));
}
}
源码地址:http://www.wisely.top/2018/01/27/spring-security-5x-jian-rong-duo-zhong-mi-ma-jia-m/
相关推荐
在 Spring Security 5.x 版本中,它提供了对多种密码加密方式的兼容性,以适应不同场景下的安全性需求。本文将深入探讨如何在 Spring Security 中实现这种兼容性,并通过实例进行演示。 首先,Spring Security 提供...
Spring Security 3 的发布日期是 2010 年 5 月。 #### 二、Spring Security 3 主要特性 ##### 1. 安全性强化 - **身份验证机制**:支持多种认证方式,如基于表单的认证、HTTP 基本身份验证、OAuth 等。 - **授权...
9. **安全模块 (Spring Security)**:Spring Security提供了认证和授权功能,保护了应用程序的安全。在5.2.5版本中,安全性得到了提升,包括新的加密技术和对现代威胁的防护。 10. **国际化 (Internationalization,...
Spring Security 可以通过多种方式获取: - **Maven**:通过在项目的 `pom.xml` 文件中添加 Maven 依赖来引入。 - Maven Repositories:可以指定中央仓库或其他第三方仓库地址。 - Spring Framework BOM:推荐...
1. **身份验证**:Spring Security 提供了多种方式来处理用户身份验证,包括基于内存的、JDBC的用户信息存储,以及与LDAP服务器集成等。在2.0.5版本中,用户可以配置UserDetailsService接口来定义用户信息的获取方式...
此外,它还强化了CSRF防护和密码加密策略,确保应用的安全性。 另外,Spring AMQP和Spring Integration这两个模块在5.0.5中也进行了更新,以更好地处理消息传递和系统集成。它们提供了对RabbitMQ和其他消息中间件的...
10. **安全模块**:Spring Security提供了一套全面的安全管理解决方案,包括认证、授权和加密等功能。4.3.10版本对OAuth2的支持进行了优化,增强了安全性。 总的来说,Spring Framework 4.3.10.RELEASE是一个成熟且...
在安全性方面,Spring Security提供了一套完整的解决方案,包括认证、授权和加密。它可以通过注解或XML配置来保护应用程序,防止未授权访问。 总的来说,Spring Framework 5.0.2.RELEASE是企业级Java开发的强大工具...
Spring Security 使用了语义版本控制,其中主要版本、次要版本和补丁版本分别代表了不兼容的重大更改、兼容新功能的添加和向后兼容的小修小补。例如,`3.1.3.RELEASE` 表示主要版本为 3,次要版本为 1,补丁版本为 3...
### Spring Security 安全权限管理核心知识点解析 #### 第一章:一个不安全应用的剖析 **安全审计** - **目的**:通过安全审计来识别应用程序中存在的潜在安全风险。 - **流程**: - **审查应用程序结构**:了解...
- **spring-security-crypto**: 包含了加密和哈希工具,用于存储密码和其他敏感信息时确保数据安全性。 - **spring-security-cas**: 与Central Authentication Service (CAS) 协议集成,提供单点登录(SSO)功能。...
- **与 Spring MVC 集成**:如果项目已经使用了 Spring MVC,则可以通过特定的配置方式来集成 Spring Security。 ##### 3.2 HttpSecurity 类 `HttpSecurity` 类是 Java 配置的核心类之一,提供了大量的配置选项来...
它集成了Spring Security,提供了丰富的功能,包括身份验证、授权、会话管理、跨站请求伪造(CSRF)防护、密码加密等。通过此框架,开发者可以更便捷地实现权限控制和安全防护,减少重复的工作量。 1. **身份验证**...
10. **安全**:Spring Security 是Spring项目的一部分,它提供了全面的安全管理解决方案,包括认证、授权和加密。 综上所述,Spring Framework 4.3.12.RELEASE 提供了一个强大且灵活的框架,涵盖了从后端服务到前端...
- Spring Security提供了多种身份验证机制,包括但不限于: - **表单登录**:用户通过输入用户名和密码来登录。 - **记住我功能**:允许用户选择“记住我”,以自动登录。 - **OAuth2**:支持使用OAuth2进行外部...
6. **Spring Security**:为应用程序提供全面的安全管理,包括认证、授权和加密。在3.2.3.RELEASE中,Spring Security加强了对OAuth2的支持,以及对JSON Web Token(JWT)的集成。 7. **Spring Integration**:提供...
Spring Security是Spring生态中的安全组件,在5.0.19.RELEASE中,它支持OAuth2、JWT等现代认证方式,并且强化了CSRF防护和加密算法,确保应用的安全性。 10. **性能优化** 除了新特性的添加,5.0.19.RELEASE还...
- **安全改进**:Spring Security组件更新,提供了更多的安全特性,如OAuth2支持和加密改进。 3. **使用Spring 5.0.2**: - **依赖管理**:在Maven或Gradle项目中,需添加相应的Spring 5.0.2依赖。 - **配置**:...
此外,它还支持CSRF防护、密码加密、会话管理等安全特性,确保应用程序的安全性。 DWR(Direct Web Remoting)3则是一种JavaScript到Java的远程调用技术,它使得在Web浏览器中直接调用服务器端的方法成为可能,极大...