【SpringBoot Cloud】

Security

PasswordConfig 加密


package org.example.car.rental.security;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.DelegatingPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;

import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;

@Configuration // 表示这是一个配置类,通常用于Spring框架中配置Bean等。
@Data // Lombok提供的注解,用于自动生成getter、setter、toString等方法。
public class PasswordConfig {
    // 通过@Value注解从应用的配置文件中动态注入加密强度值。
    @Value("${encoder.ctype.strength}")
    private int strength;

    // 通过@Value注解从应用的配置文件中动态注入加密使用的密钥。
    @Value("${encoder.ctype.secret}")
    private String secret;

    /**
     * 创建并返回一个BCryptPasswordEncoder实例。
     * 此密码编码器使用指定的加密强度和基于secret参数生成的SecureRandom实例。
     *
     * @return BCryptPasswordEncoder 返回一个配置好的BCryptPasswordEncoder实例。
     */
//    @Bean
//    public BCryptPasswordEncoder passwordEncoder() {
//        // 使用secret生成一个SecureRandom实例,以增加加密过程的随机性。
//        SecureRandom secureRandom = new SecureRandom(secret.getBytes());
//        return new BCryptPasswordEncoder(strength, secureRandom);
//    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        Map<String, PasswordEncoder> encoders = new HashMap<>();
        encoders.put("bcrypt", new BCryptPasswordEncoder(strength));
        return new DelegatingPasswordEncoder("bcrypt", encoders);
    }
}

// 调用方式
package org.example.car;

import org.example.car.rental.security.PasswordConfig;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.security.crypto.password.PasswordEncoder;

@SpringBootTest(classes = PasswordConfig.class)
public class PasswordConfigTest {

    @Autowired
    private ApplicationContext context;

    @Test
    public void testPasswordEncoder() {
        // 从Spring上下文中获取PasswordEncoder Bean
        PasswordEncoder passwordEncoder = context.getBean(PasswordEncoder.class);

        // 假设你的PasswordConfig类中有一个int类型的成员变量strength,并且已经赋值
        // 这里直接使用passwordEncoder来编码一个示例密码"123456"
        String rawPassword = "123456";
        String encodedPassword = passwordEncoder.encode(rawPassword);

        System.out.println("Encoded Password: " + encodedPassword);

        // 可选:验证编码后的密码是否能正确匹配原始密码
        boolean matches = passwordEncoder.matches(rawPassword, encodedPassword);
        assert matches : "Encoded password does not match the raw password";
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值