Spring Boot+Security使用BCryptPasswordEncoder加密用户登录密码

本文记录了基于Security的BCryptPasswordEncoder加密、验证策略的使用方法。使用前需导入依赖,刷新maven。定义工具类后可进行加密操作,如注册时对用户密码加密,数据库存储密文。该策略无解密,只能验证密码,登录时可据此判断密码是否正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BCryptPasswordEncoder的具体介绍我就不多说了,网上到处都是,比如这个:
BCryptPasswordEncoder加密、验证策略
我这里就是记录一下怎么用。

因为它是基于Security的,所以在使用之前,需要在pom.xml导入依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

刷新一下maven,然后就可以用了

为了在使用的时候不麻烦,先定义一个工具类

package com.example.yuyun.security.utils;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

/**
 * 安全服务工具类
 * @Author HeYunHui
 * @create 2021/1/11 1:32
 */
public class SecurityUtils {
    /**
     * 生成BCryptPasswordEncoder密码
     * @param password 密码
     * @return 加密字符串
     */
    public static String encodePassword(String password)
    {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.encode(password);
    }

    /**
     * 判断密码是否相同
     * @param rawPassword 真实密码
     * @param encodedPassword 加密后字符
     * @return 结果
     */
    public static boolean matchesPassword(String rawPassword, String encodedPassword)
    {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
}

1、加密

SecurityUtils.encodePassword("密码")

如:我在注册时对用户输入的密码进行加密:

@PostMapping("register")
@ResponseBody
public HashMap register(@RequestBody Users users) throws Exception{
    HashMap m = new HashMap();
    try {
        /** encode()加密 */
        users.setUserPwd(SecurityUtils.encodePassword(users.getUserPwd()));
        Boolean u=userService.insertUsers(users);
        if (u==true){
            m.put("code", String.valueOf(HttpStatus.SUCCESS));
            m.put("msg","注册成功");
        }else {
            m.put("msg","error");
        }

    } catch (Exception e) {
        e.printStackTrace();
        m.put("msg","error");
    }
    return m;
}

加密了之后,数据库中存储的密码就变成了密文
在这里插入图片描述

2、解密
那加密之后如何解密呢?

使用BCryptPasswordEncoder加密之后,没有解密之说,只能对密码进行验证,也就是

将数据库存储的加密密码与用户输入的密码比较

返回值为true,则密码输入正确,登录成功;返回false,密码错误

验证密码:

SecurityUtils.matchesPassword("用户输入的密码","数据库中存储的密码")

在登录中:

@PostMapping("login")
@ResponseBody
public HashMap<String,String> login(
        @RequestBody User user) throws IOException {
    HashMap hashMap=new HashMap(10);
    try {
    	/** 先根据用户输入的用户名查询数据 */
        Users u=userService.findPwdByName(user.getUserName());
        /** matchesPassword()验证用户输入密码和数据库加密密码是否一致 */
        if(u!=null&& SecurityUtils.matchesPassword(user.getUserPwd(),u.getUserPwd())){
            hashMap.put("code", String.valueOf(HttpStatus.SUCCESS));
            hashMap.put("msg","登录成功");
        }
        else {
            hashMap.put("msg","用户名或密码错误");
        }
    } catch (Exception e) {
        e.printStackTrace();
        hashMap.put("msg","error");
    }
    return hashMap;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨云21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值