`
wiselyman
  • 浏览: 2093429 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
Group-logo
点睛Spring4.1
浏览量:82287
74ae1471-94c5-3ae2-b227-779326b57435
点睛Spring MVC4...
浏览量:130766
社区版块
存档分类
最新评论

Spring Security 5.x兼容多种密码加密方式

 
阅读更多

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/

 
  • 大小: 102.4 KB
0
1
分享到:
评论

相关推荐

    spring security 5.x实现兼容多种密码的加密方式

    在 Spring Security 5.x 版本中,它提供了对多种密码加密方式的兼容性,以适应不同场景下的安全性需求。本文将深入探讨如何在 Spring Security 中实现这种兼容性,并通过实例进行演示。 首先,Spring Security 提供...

    Packtpub.Spring.Security.3.May.2010.

    Spring Security 3 的发布日期是 2010 年 5 月。 #### 二、Spring Security 3 主要特性 ##### 1. 安全性强化 - **身份验证机制**:支持多种认证方式,如基于表单的认证、HTTP 基本身份验证、OAuth 等。 - **授权...

    spring-5.2.5.RELEASE-dist.zip

    9. **安全模块 (Spring Security)**:Spring Security提供了认证和授权功能,保护了应用程序的安全。在5.2.5版本中,安全性得到了提升,包括新的加密技术和对现代威胁的防护。 10. **国际化 (Internationalization,...

    spring-security-reference-4.1.1.RELEASE

    Spring Security 可以通过多种方式获取: - **Maven**:通过在项目的 `pom.xml` 文件中添加 Maven 依赖来引入。 - Maven Repositories:可以指定中央仓库或其他第三方仓库地址。 - Spring Framework BOM:推荐...

    spring_security2_2.0.5.zip

    1. **身份验证**:Spring Security 提供了多种方式来处理用户身份验证,包括基于内存的、JDBC的用户信息存储,以及与LDAP服务器集成等。在2.0.5版本中,用户可以配置UserDetailsService接口来定义用户信息的获取方式...

    spring-5.0.5.rar

    此外,它还强化了CSRF防护和密码加密策略,确保应用的安全性。 另外,Spring AMQP和Spring Integration这两个模块在5.0.5中也进行了更新,以更好地处理消息传递和系统集成。它们提供了对RabbitMQ和其他消息中间件的...

    spring-framework-4.3.10.RELEASE

    10. **安全模块**:Spring Security提供了一套全面的安全管理解决方案,包括认证、授权和加密等功能。4.3.10版本对OAuth2的支持进行了优化,增强了安全性。 总的来说,Spring Framework 4.3.10.RELEASE是一个成熟且...

    spring-framework-5.0.2.RELEASE-dist.zip

    在安全性方面,Spring Security提供了一套完整的解决方案,包括认证、授权和加密。它可以通过注解或XML配置来保护应用程序,防止未授权访问。 总的来说,Spring Framework 5.0.2.RELEASE是企业级Java开发的强大工具...

    SpringSecurity 中文

    ### Spring Security 安全权限管理核心知识点解析 #### 第一章:一个不安全应用的剖析 **安全审计** - **目的**:通过安全审计来识别应用程序中存在的潜在安全风险。 - **流程**: - **审查应用程序结构**:了解...

    spring security权限管理

    - **spring-security-crypto**: 包含了加密和哈希工具,用于存储密码和其他敏感信息时确保数据安全性。 - **spring-security-cas**: 与Central Authentication Service (CAS) 协议集成,提供单点登录(SSO)功能。...

    spring-security-reference-4.0.1

    - **与 Spring MVC 集成**:如果项目已经使用了 Spring MVC,则可以通过特定的配置方式来集成 Spring Security。 ##### 3.2 HttpSecurity 类 `HttpSecurity` 类是 Java 配置的核心类之一,提供了大量的配置选项来...

    renren-security开发文档3.2_完整版.zip

    它集成了Spring Security,提供了丰富的功能,包括身份验证、授权、会话管理、跨站请求伪造(CSRF)防护、密码加密等。通过此框架,开发者可以更便捷地实现权限控制和安全防护,减少重复的工作量。 1. **身份验证**...

    最新版spring-framework-4.3.12.RELEASE-dist 完整包

    10. **安全**:Spring Security 是Spring项目的一部分,它提供了全面的安全管理解决方案,包括认证、授权和加密。 综上所述,Spring Framework 4.3.12.RELEASE 提供了一个强大且灵活的框架,涵盖了从后端服务到前端...

    SpringOne-Using Spring Security 2

    - Spring Security提供了多种身份验证机制,包括但不限于: - **表单登录**:用户通过输入用户名和密码来登录。 - **记住我功能**:允许用户选择“记住我”,以自动登录。 - **OAuth2**:支持使用OAuth2进行外部...

    spring-framework-3.2.3.RELEASE

    6. **Spring Security**:为应用程序提供全面的安全管理,包括认证、授权和加密。在3.2.3.RELEASE中,Spring Security加强了对OAuth2的支持,以及对JSON Web Token(JWT)的集成。 7. **Spring Integration**:提供...

    官方原版源码 spring-framework-5.0.19.RELEASE.zip

    Spring Security是Spring生态中的安全组件,在5.0.19.RELEASE中,它支持OAuth2、JWT等现代认证方式,并且强化了CSRF防护和加密算法,确保应用的安全性。 10. **性能优化** 除了新特性的添加,5.0.19.RELEASE还...

    spring5.0.2框架包.zip

    - **安全改进**:Spring Security组件更新,提供了更多的安全特性,如OAuth2支持和加密改进。 3. **使用Spring 5.0.2**: - **依赖管理**:在Maven或Gradle项目中,需添加相应的Spring 5.0.2依赖。 - **配置**:...

    spring3mvc+hibernate4+spring-security3+dwr3整合架包

    此外,它还支持CSRF防护、密码加密、会话管理等安全特性,确保应用程序的安全性。 DWR(Direct Web Remoting)3则是一种JavaScript到Java的远程调用技术,它使得在Web浏览器中直接调用服务器端的方法成为可能,极大...

Global site tag (gtag.js) - Google Analytics