Spring Boot2整合Shiro(2):用 BCrypt 加密密码

Apache Shiro快速入门:Java安全框架核心概念与Spring Boot集成实战 在Java应用开发中,身份认证与授权是保障系统安全的核心机制。其基本原理是通过验证用户身份(认证)和控制资源访问权限(授权)来构建安全防线。这一技术价值在于将复杂的安全逻辑抽象化,使开发者能够专注于业务实现。在微服务、前后端分离等现代架构中,高效管理用户会话和权限成为刚需。Apache Shiro作为一个轻量级Java安全框架,通过简洁的API封装了认证、授权、会话管理等关键功能,降低了安全集成的复杂度。其核心组件如Subject、SecurityManager和Realm,共同构成了灵活的安全数据桥梁,支 阅读详情

因为新项目没有继续用Shiro框架,再加上人比较懒,所以就没有再写新的关于 Shiro 的文章。但是今天发现已经有几个朋友在 GitHub 上的给示例项目加星,也有留言咨询的。我很高兴这篇文章能够帮到大家,也再次让我感受到把在工作中学到的东西写出来,和大家分享是这么一件令人高兴的事,用知乎上的话说这是一件长半衰期的事。我会继续写下去的

前言

上一篇文章,我们用 Spring Boot2 框架搭建了一个 web 项目,并且使用 Shiro 作为安全管理框架实现了用户的身份认证,也就是登录。这篇文章首先简要介绍了密码储存的演进史,然后结合代码介绍了在 Shiro 中怎么使用 MD5、MD5 加盐、 Bcrypt 等三种逐渐进步的方法加密密码。

密码存储演进史

在上一篇文章中我们保存在系统的用户密码还是明文,这显然是很不合理和不专业的做法。作为一名工程师 专业自然是必须的。

常用的做法是使用加密算法对用户密码加密然后存储数据库,当用户登录时,对用户密码使用相同的算法进行加密,然后与数据库中的密文进行比对。作为一个合格专业的系统有两点需要保证:

  1. 用户账号不易被破解
  2. 系统不能保存用户密码原文

关于密码存储演进史这篇文章讲的很好,朋友们可以看一下。从文章中我们知道密码储存大概分为几个阶段:

  • 明文储存
  • 单向 hash(md5、sha256)
  • 单向 has h加盐
  • 慢加密算法(Bcrypt、Scrypt)

单项hash算法

注册用户

因为要演示使用 Shiro 对密码进行加密,上一节中的那种保存密码的方式非常不方便。在这一节我们添加一个用户注册的接口,使用用户对象保存用户名和用户密码并且用一个集合保存系统已注册的用户。

新建用户类,并重写toString方法。


package top.zhaodongxx.domain;

/**
 * @author zhaodong zhaodongxx@outlook.com
 * @version v1.0
 * @since 2018/7/19 10:40
 */
public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

在 ShiroService 类中添加新增用户的方法 addUser ,我们使用 SimpleHash 类使用 MD5 加密算法对密码进行加密,然后在提供一个通过用户名查询用户的方法,用于后面的登录验证。


package top.zhaodongxx.service;

import org.apache.shiro.crypto.hash.SimpleHash;
import org.springframework.stereotype.Service;
import top.zhaodongxx.domain.User;

import java.util.ArrayList;
import java.util.List;

/**
 * <P></P>
 *
 * @author zhaodong zhaodongxx@outlook.com
 * @version v1.0
 * @since 2018/3/30 22:59
 */
@Service
public class ShiroService {

    public static List<User> userList = new ArrayList<User>();

    public String getPasswordByUsername(String username) {
        switch (username) {
            case "liming":
                return "123";
            case "hanli":
                return "456";
            default:
                return null;
        }
    }

    //根据用户名查询用户
    public User getUserByUsername(String username) {
        System.out.println("登陆的用户 " + username);
        for (User user : userList) {
            if (username.equals(user.getUsername())) {
                return user;
            }
        }
        return null;
    }

    //添加用户
    public User addUser(String username, String password) {
        //通过MD5的方式加密密码
        String newpwd = new SimpleHash("MD5", password).toHex();

        User user = new User();
        user.setUsername(username);
        user.setPassword(newpwd);

        userList.add(user);

        System.out.println(user);
        return user;
    }
}

新建注册控制器类 RegisterController ,并提供注册接口 /register 。


package top.zhaodongxx.controller;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import top.zhaodongxx.domain.User;
import top.zhaodongxx.result.Result;
import top.zhaodongxx.result.ResultGenerator;
import top.zhaodongxx.service.ShiroService;

import javax.annotation.Resource;

/**
 * @author zhaodong zhaodongxx@outlook.com
 * @version v1.0
 * @since 2018/7/19 10:53
 */
@RestController
public class RegisterController {

    @Resource
    private ShiroService shiroService;

    @PostMapping("/register")
    public Result register(String username, String password) {

        User user = shiroService.addUser(username, password);
        return ResultGenerator.genSuccessResult(user).setMessage("注册成功");
    }
}

如下体所示到这一步,我们就已经新建了一个用户注册的接口。

这里写图片描述

为Shiro配置加密算法

配置hash算法加密主要分为三步:

  • 创建凭证匹配器 HashedCredentialsMatcher
  • 为我们自定义的 MyShiroRealm Bean 添加凭证匹配器 HashedCredentialsMatcher
  • 修改 MyShiroRealm 中 doGetAuthenticationInfo 方法的获取用户的方法

在 Shiro 配置文件 ShiroConfig 中创建凭证匹配器 HashedCredentialsMatcher


/**
    * 凭证匹配器
    *
    * @return
    */
@Bean
public HashedCredentialsMatcher hashedCredentialsMatcher() {
    HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
    /**
        * hash算法:这里使用MD5算法;
        */
    hashedCredentialsMatcher.setHashAlgorithmName("MD5");
    /**
        * 散列的次数,比如散列两次,相当于 md5(md5(""));
        */
    hashedCredentialsMatcher.setHashIterations(1);

    return hashedCredentialsMatcher;
}

在 Shiro 配置文件 ShiroConfig 中为我们自定义的 MyShiroRealm Bean 添加凭证匹配器 HashedCredentialsMatcher


/**
    * 自定义的Realm
    */
@Bean(name = "myShiroRealm")
public MyShiroRealm myShiroRealm(){
    MyShiroRealm myShiroRealm = new MyShiroRealm();
    myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
    return myShiroRealm;
}

修改 MyShiroRealm 中 doGetAuthenticationInfo 方法


@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
    //获取用户账号
    String username = token.getPrincipal().toString();

    User user = shiroService.getUserByUsername(username);
    if (!ObjectUtils.isEmpty(user)) {

        String realmName = getName();
        return new SimpleAuthenticationInfo(username, user.getPassword(), realmName);
    }
    return null;
}

到目前为止,我们已经成功的为 Shiro 配置了 MD5 这种加密方式。
下面我们来测试一下,先重启项目,注册新的账号,然后等新账号登录。如下图所示,登录成功。

这里写图片描述
这里写图片描述

单向hash加盐

单向hash算法,保证了即使是系统管理员也不能轻易的通过密文反推出密码原文。但是单向 hash 还是有个致命的缺点:相同的密码,hash值一样。

改进的措施是引入一个 随机的因子 掺杂进明文中进行 hash 计算,这样的随机因子通常被称之为盐 (salt)。salt 一般是用户相关的,且要保证在一个系统内每一个用户的盐都不相同,这样就可以保证即使密码相同,hash 值也一定不相同。一般的做法是用用户表中的主键作为盐。因为在我们这个工程中没有数据库,所以我们把用户名作为盐来示范一下。

为 Shiro 的单项 hash 算法加上盐需要两步:

  • 修改注册用户的加密算法
  • 修改 MyShiroRealm 类中 doGetAuthenticationInfo 方法的返回值 SimpleAuthenticationInfo 的新建方法参数:盐

修改注册用户的加密算法

String newpwd = new SimpleHash("MD5", password, ByteSource.Util.bytes(username)).toHex();

@Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //获取用户账号
        String username = token.getPrincipal().toString();

        User user = shiroService.getUserByUsername(username);
        if (!ObjectUtils.isEmpty(user)) {

            /**
             * 四个参数
             * principal:认证的实体信息,可以是username,也可以是数据库表对应的用户的实体对象
             * credentials:数据库中的密码(经过加密的密码)
             * credentialsSalt:盐值(使用用户名)
             * realmName:当前realm对象的name,调用父类的getName()方法即可
             */

            String realmName = getName();
            String credentials = user.getPassword();
            ByteSource credentialsSalt = ByteSource.Util.bytes(username);

            return new SimpleAuthenticationInfo(username, credentials, credentialsSalt, realmName);
        }
        return null;
    }

Bcrypt

Shiro 框架没有内置 BCrypt 。需要我们引入新的库 jBCrypt:


<dependency>
    <groupId>de.svenkubiak</groupId>
    <artifactId>jBCrypt</artifactId>
    <version>0.4.1</version>
</dependency>

在注册用户时修改加密方式,在 BCrypt 中我们不需要为每个用户分配不同的盐,只要使用 BCrypt.gensalt() 就可以生成盐。


public String encodeByBCrypt(String password) {
    return BCrypt.hashpw(password, BCrypt.gensalt());
}

在 Shiro 配置文件 ShiroConfig 中为我们自定义的 MyShiroRealm Bean 添加凭证匹配器 HashedCredentialsMatcher。


/**
    * 自定义的Realm
    */
@Bean(name = "myShiroRealm")
public MyShiroRealm myShiroRealm() {
    MyShiroRealm myShiroRealm = new MyShiroRealm();
    //配置单项hash
    //myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());

    //配置 BCrypt
    myShiroRealm.setCredentialsMatcher(new CredentialsMatcher() {
        @Override
        public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
            UsernamePasswordToken userToken = (UsernamePasswordToken) token;
            //要验证的明文密码
            String plaintext = new String(userToken.getPassword());
            //数据库中的加密后的密文
            String hashed = info.getCredentials().toString();

            return BCrypt.checkpw(plaintext, hashed);
        }
    });
    return myShiroRealm;
}

到此为止,我们使用 BCrypt 算法加密了密码。如下图所示:

这里写图片描述
这里写图片描述
这里写图片描述

可以发现,相同密码加密两次后的密文是不一样的。

至此,我们已经完成了为 Shiro 使用 BCrypt 算法加密密码。

项目下载地址

参考资料

若依框架后台密码重置全攻略:从BCrypt原理到数据库实操 用户认证与密码安全是现代系统开发的基础模块,其核心原理是通过加密算法保护用户凭证。BCrypt作为当前主流的密码哈希算法,采用加盐机制确保即使相同明文密码每次加密结果也不同,通过单向哈希函数实现验证而非解密,这为系统提供了关键的安全保障。在工程实践中,理解密码存储机制对系统维护至关重要,尤其是在处理密码重置这类常见运维场景时。当管理员遗忘若依(RuoYi)等基于Spring Security框架的后台密码时,直接操作数据库更新密码字段成为核心解决方案。本文通过解析BCrypt加密原理,提供通过后端代码生成合 阅读详情

相关推荐

Spring Boot Swagger安全防护:三步实现API文档密码认证

在API开发领域,接口文档是前后端协作和系统集成的关键枢纽。Swagger(OpenAPI)作为行业标准工具,能自动生成交互式文档,极大提升开发效率。然而,其默认的公开访问特性在项目上线后可能带来严重的安全隐患,如接口信息泄露和未授权操作风险。基于API安全和权限最小化原则,为Swagger添加访问控制成为一项必要的工程实践。本文聚焦于通过应用层基础认证方案,利用Spring Security框架,以低侵入、高独立性的方式,为Swagger UI构建一道基础访问门禁。该方案通过配置安全过滤链、集成密码编码器

weixin_33895516的博客 487

springboot+BCrypt简单实用密码加密

1、引入SpringSecurity依赖 <!--security依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>

JFENG14的博客 1272

Apache Shiro与Spring Security终极对比:10个维度解析Java安全框架选型

在Java企业级应用开发中,认证与授权是保障系统安全的基石。认证机制负责验证用户身份,授权模型则控制用户对资源的访问权限,这两者共同构成了应用安全的核心防线。从技术原理上看,安全框架通过封装复杂的加密算法、会话管理和权限验证逻辑,为开发者提供了标准化、可复用的安全解决方案,其技术价值在于显著降低安全功能的实现门槛,提升系统的整体安全水位。在实际工程实践中,不同的安全框架因其设计哲学和架构差异,适用于不同的应用场景:轻量级库更适合快速原型和非Spring技术栈项目,而企业级框架则在微服务架构和OAuth 2.

weixin_30482181的博客 397

SpringBoot实现BCrypt密码加密(bcr加密)

BCrypt密码加密(bcr加密)

wydtyz的博客 1940

Spring Boot+Vue构建可加密个性化博客:全栈开发实战指南

在现代Web应用开发中,前后端分离架构已成为主流范式,其核心在于通过清晰的职责划分提升开发效率和系统可维护性。Spring Boot作为后端框架,以其自动配置和丰富的起步依赖,能快速构建稳健的RESTful API服务;而Vue.js凭借其响应式系统和组件化设计,为构建动态、交互丰富的前端界面提供了强大支持。这种组合的技术价值在于,它标准化了开发流程,降低了全栈开发的学习曲线,使得开发者能够专注于业务逻辑的实现。其应用场景广泛,从企业级应用到个人项目均能胜任。本文聚焦于一个具体的工程实践——构建一个具备文章

weixin_33895516的博客 639

Java安全框架Shiro:认证授权与会话管理详解

Java安全框架是构建企业级应用的重要基础设施,负责处理认证、授权等核心安全功能。Apache Shiro作为轻量级安全框架,通过分层架构设计实现了认证授权、会话管理和加密等模块的解耦。其核心价值在于提供简单一致的API,支持从Web应用到命令行工具的各种部署环境。在认证方面,Shiro采用Realm作为数据源适配层,支持多因素认证策略;授权机制则提供基于角色和权限的细粒度访问控制。典型应用场景包括Spring Boot集成、分布式会话管理以及微服务安全网关等。本文以Shiro框架为例,深入解析其认证流程源

weixin_30500473的博客 316

BCrypt算法在SpringBoot中的最佳实践

Spring Security是一个广泛使用的身份验证和授权框架,而Spring Security Crypto是其中的一个模块,专门用于提供加密和安全相关的功能,提供对称加密(如AES和RSA)、密钥生成和密码编码等功能。Crypt是一种密码哈希函数,BCrypt算法使用“盐”来加密密码,这是一种随机生成的字符串,可以在密码加密过程中使用,以确保每次加密结果都不同。在Spring Security Crypto中,你可以使用BCryptPasswordEncoder类来进行BCrypt加密、验密。

程序吟游的博客 5635

SpringBoot整合Spring Security实现认证与授权实战

在Java企业级开发中,系统安全是核心需求之一。Spring Security作为Spring生态中的安全框架,通过认证(Authentication)和授权(Authorization)两大机制保障系统安全。其工作原理基于过滤器链和权限投票机制,能够无缝集成到SpringBoot项目中。技术价值体现在提供默认安全防护的同时,支持深度定制开发。典型应用场景包括后台管理系统权限控制、API接口访问限制等。通过配置PasswordEncoder实现密码加密,结合@PreAuthorize注解可实现方法级细粒度权

weixin_33766805的博客 480

解决Spring Boot中的数据安全与加密

通过本文的讨论,读者可以了解在Spring Boot应用中如何有效地实现数据安全与加密措施,保护应用中的敏感信息和数据传输安全。合理地使用加密算法、SSL证书以及安全的数据存储方案,是保障应用安全性的关键步骤。微赚淘客系统3.0小编出品,必属精品,转载请注明出处!

技术研究中心 1057

从零构建:如何用MATLAB工具箱打造你的第一个多体动力学仿真模型

本文详细介绍了如何使用MATLAB的Simscape Multibody工具箱从零开始构建多体动力学仿真模型,特别适合初学者学习倒立摆系统的建模与仿真。文章涵盖环境准备、坐标系设置、物理模型构建、参数化建模及性能优化等关键步骤,帮助工程师快速掌握这一强大的仿真工具。

water的专栏 963

概述DeepLab系列(deeplab v1, deeplab v2, deeplab v3, deeplab v3+)

前言:图像分割是指像素级别的图像识别,即标注出图像中每个像素所属的对象类别。 语义分割更注重类别之间的区分,而实例分割更注重个体之间的区别。 DeepLab是由Google团队提出的一系列图像分割算法。 DeepLab v1 (2014年) Paper (ICLR 2015) Code 创新点: 空洞卷积(Atrous Conv); <解决编码过程中信号不断被下采样,细节丢失的问题> 全连接条件随机场(Fully-connected Conditional Random Field)。

ZSH12345678900的博客 5528

spring boot密码加密方式

使用@Bean编写一个实现了@Override@Override。

m0_50742275的博客 1747

MATLAB并行开不了的解决办法

在服务器上新安装了MATLAB 2013b,在开并行计算的时候出现了下列问题 经过在网上搜多这个问题,我感觉这个问题应该是安装的时候的验证问题或者激活不成功之类的。注意其中有一句validate the profile ‘local’ in the Cluster Profile Manager.在matlab官网上找到了设置Cluster Manager的教程,如下 parallel>

sinat_36713319的博客 5987

Spring Boot2整合Shiro:BCrypt加密密码,springsecurity+BCryptPasswordEncoder实现加密注册登录 加密问题

Spring Boot2+Shiro:加密密码注册, 登陆验证实现 一.前言 我在这与大家分享一下登陆验证时的一些问题和实现。应用考虑到安全,绝不能明文的方式保存密码(数据库不能存看得懂的秘密,一定程度也保证了用户的安全,同时也让很多攻破数据库的程序员没法瞎搞,比如 玩游戏出现用户的账号异地登陆之类的。。。) 有很多标准的算法比如SHA或者MD5(MD5可以用彩虹表暴力破解 后面会讲解如何破解),MD5结合salt(盐)是一个不错的选择,j 项目使用Shiro框架做密码验证时的改进。 学习内容: 提示:这里

qq_44970883的博客 1703

GitLab社区版vs企业版:本地部署性能对比与选型建议(含实测数据)

本文深入对比GitLab社区版(CE)与企业版(EE)在本地部署中的性能差异与功能特性,提供实测数据与选型建议。测试显示EE版在并发克隆、CI流水线启动等场景性能提升显著,尤其适合需要高级安全合规与CI/CD功能的团队。文章还包含硬件配置指南与成本效益分析,帮助技术决策者做出明智选择。

weixin_28828243的博客 291

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

海康visionmaster-渲染结果:通过绑定流程或模块获取 渲染结果的方法

视觉人机器视觉的博客 2635

Spring Boot整合Shiro实现权限认证

本文介绍如何在Spring Boot项目中整合Apache Shiro安全框架,实现完整的认证授权功能。主要内容包括:环境准备(JDK 1.8+、Spring Boot 2.7.x、MyBatis-Plus 3.5.x等)、Maven依赖配置(包含Shiro核心整合包、Thymeleaf扩展等)、以及application.yml配置示例(数据源、服务器端口等)。文章提供完整的依赖管理和配置方案,帮助开发者快速搭建基于Shiro的安全框架,实现权限控制功能。

J_liaty的博客 1233

【华为OD机试真题】7、字符串筛选排序 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >输入一个由N个大小写字母组成的字符串 按照ASCII码值从小到大进行排序 查找字符串中第K个最小ASCII码值的字母(k>=1) 输出该字母所在字符串中的位置索引(字符串的第一个位置索引为0) k如果大于字符串长度则输出最大ASCII码值的字母所在字符串的位置索引 如果有重复字母则输出字母的最小位置索引

KJ.JK 2266

Spring Boot 实现注册密码加密

使用 Hutool 工具库中的 Bcrypt 类实现密码加密。

Serenity_Qin的博客 959

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1407

2023推免(夏令营+套实验室)面试总结(博文附问题汇总和参考答案)

2023推免(夏令营+套实验室)面试总结(博文附问题汇总和参考答案)

m0_51339444的博客 1804

Shiro - 快速搭建第一个 Shiro 基础工程

Apache Shiro 是一个轻量级 Java 安全框架,提供认证、授权、会话管理和加密功能。本文从零开始搭建基础 Shiro 工程,首先介绍了 Shiro 的核心概念(Subject、SecurityManager、Realm等),然后通过 Maven 配置环境依赖。文章演示了两种实现方式:1)基于 INI 配置文件的控制台应用,展示基本认证授权流程;2)Web 应用集成,通过过滤器实现 URL 级别安全控制。代码示例包括用户登录、权限检查等核心功能实现,帮助开发者快速掌握 Shiro 的基本用法。

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SpringBoot整合Shiro实现安全认证与权限控制

在Java企业级开发中,安全认证是系统架构的核心组件。Apache Shiro作为轻量级安全框架,通过Subject、SecurityManager和Realm三大核心组件,提供了简洁而强大的认证授权解决方案。相比Spring Security的复杂配置,Shiro以其'简单至上'的设计哲学显著降低了学习曲线。技术实现上,Shiro支持基于角色的访问控制(RBAC)和权限字符串的细粒度控制,通过哈希加密算法保障密码安全,并可与Redis等缓存技术集成提升性能。典型应用场景包括电商系统的用户权限管理、金融平台

weixin_30527423的博客 422

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Shiro - 搭建 Shiro 高可用权限系统 满足生产环境要求

摘要 本文详细介绍了如何使用Apache Shiro构建高可用的生产级权限系统。内容涵盖: Shiro核心优势:轻量级、易扩展的认证、授权、会话管理和加密功能 生产环境要求:高性能、可扩展性、数据一致性和安全加固等关键指标 技术实现方案: 自定义Realm实现数据库权限校验 BCrypt加密存储密码 Redis集成缓存和会话管理 分布式会话支持 防CSRF等安全加固措施 通过完整的代码示例,展示了如何将Shiro从基础功能升级到满足企业级高可用要求的权限系统。文章适合需要构建安全、可靠权限体系的Java开发

千淘万漉虽辛苦,吹尽狂沙始到金 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

基于Spring Boot与AES/RSA的数据加密系统毕业设计实践指南

数据加密是信息安全领域的核心技术,其基本原理是通过特定算法将明文转换为不可读的密文,确保数据在存储和传输过程中的机密性与完整性。在工程实践中,对称加密算法(如AES)与非对称加密算法(如RSA)常结合使用,构建混合加密体系,以兼顾效率与安全性。这类技术对于保护敏感信息、满足合规要求具有重要价值,广泛应用于文件安全、通信加密、身份认证等场景。本文聚焦于如何将密码学原理工程化,详细解析一个包含用户认证、密钥管理、操作审计等核心模块的**数据加密系统**的实现路径,并重点探讨了在**Spring Boot**框架

cqwf95925的博客 326

Shiro(2)

文章目录Shiro1 自定义realm1.1 认证1.2 授权1.3 加密2 配置3 注解权限控制4 过滤器5 记住我功能 Shiro 1 自定义realm 1.1 认证 1.2 授权 1.3 加密 2 配置 登录案例 3 注解权限控制 4 过滤器 自带的 自定义过滤器 5 记住我功能 ...

weixin_45044097的博客 169
上一篇: 使用Kettle实现数据实时增量同步
下一篇: Ant Design之表格动态合并行
zhaodongxx
博客等级 码龄12年 116粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值