SpringBoot与Shrio(二)MD5随机盐散列版认证

SpringBoot实现用户注册&密码加盐&Hibernate Validator校验注解 目录 接口说明 数据校验 导入注解的依赖 给pojo类加注解 密码盐值加密 导入依赖 新增盐值工具类 Controller Service 测试 接口说明 看完接口说明之后我们就开始实现这个功能了 数据校验 后端开发也是一定要有数据校验的,否则我们用swagger,postman这种常用工具就可以把不符合规则的数据增删改查... 阅读详情


实现简易版注册+完善登录

依赖

依赖加入mybatis、mysql驱动、druid数据源

		 <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.3</version>
        </dependency>

数据库

数据库字段,salt是盐
数据库字段
yml略,加上mybatis和数据源的配置即可
实体类,对应数据库字段

mapper接口

void save(User user);

xml

 insert into test value(#{id},#{name},#{pass},#{salt})

service

void register(User user);

serviceImpl

	@Autowired
    private UserMapper userMapper;


    @Override
    public void register(User user) {


        //业务
        //1.生成随机盐
        String salt = SaltUtils.getSalt(8);
        //2.将随机盐保存到数据
        user.setSalt(salt);
        //3.明文密码进行MD5+盐+散列
        Md5Hash md5Hash = new Md5Hash(user.getPass(),salt,1024);
        user.setPass(md5Hash.toHex());
        userMapper.save(user);
    }

SaltUtils工具类(生成随机盐)

每次从char数组里随机拿n个字符作为随机盐

public class SaltUtils {
    /**
     * 生成salt的静态方法
     */
    public static String getSalt(int n){
        char[] chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz~!@#$%^&*()_+".toCharArray();
        int length = chars.length;
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < n; i++){
            char achar = chars[new Random().nextInt(length)];
            sb.append(achar);
        }
        return sb.toString();
    }

   /* public static void main(String[] args) {
        System.out.println(getSalt(8));
    }*/
}

controller略,调service,暴露请求
请求传递User后数据库数据:
数据基于MD5+盐+散列的注册就完成了

完善登录

上一篇自定义realm的认证是假装调用dao,这次给它用真的dao完成认证
mapper加上一个根据名字查用户的方法

User findByName(String name);

xml

select id,name,pass,salt from test where name = #{name}

service和serviceImpl略
看下之前的自定义realm

public class CustomerRealm extends AuthorizingRealm {
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        String principal = (String) authenticationToken.getPrincipal();
        if("zhaoshanhe".equals(principal)){
            return new SimpleAuthenticationInfo(principal,"123456",getName());
        }
        return null;
    }
}

下边就完善它

public class CustomerRealm extends AuthorizingRealm {
    @Autowired
    private UserService userService;

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        String principal = (String) authenticationToken.getPrincipal();

        User user = userService.findByName(principal);

        if (!ObjectUtils.isEmpty(user)){
            return new SimpleAuthenticationInfo(user.getName(),user.getPass(), ByteSource.Util.bytes(user.getSalt()),getName());
        }

        return null;
    }
}

因为上边注册的时候用了MD5+盐+散列,所以还要改掉Shiro配置类里的getRealm方法。

//创建自定义Realm
    @Bean("customerRealm")
    public Realm getRealm(){
        CustomerRealm customerRealm = new CustomerRealm();
        //修改凭证校验匹配器
        HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher();
        //设置算法为MD5
        hashedCredentialsMatcher.setHashAlgorithmName("md5");
        //设置散列次数
        hashedCredentialsMatcher.setHashIterations(1024);

        customerRealm.setCredentialsMatcher(hashedCredentialsMatcher);
        return customerRealm;
    }

这才算完

ANSYS 有限元分析 接触分析 目 录一、前沿二、接触单元类三、接触单元关键选项3.1 CONTA174 KeyOption3.2 TARGE170 KeyOption四、接触分析标准步骤4.1 定义实常数4.2 定义接触和目标单元4.3 创建接触和目标单元五、接触分析实例5.1 MPC5.2 标准接触六、尾声七、参考文献 阿阳的 ANSYS 使用指南,本文仅用于个人学习,除此之外,无其他任何用途。 ANSYS 有限元分析 概述 ANSYS 有限元分析 坐标系/工作平面 ANSYS 有限元分析 几何建模 ANSY 阅读详情

相关推荐

FastAPI + Layui:打造企业级敏捷开发后台管理系统

本文详细介绍了如何使用FastAPI和Layui构建高效的企业级后台管理系统。FastAPI提供高性能的异步API支持,而Layui则简化了前端开发流程,两者结合可实现快速开发和部署。文章涵盖了从环境搭建、核心组件开发到性能优化的全流程,特别适合需要敏捷开发的企业项目。

weixin_29045585的博客 555

shiro整合springboot的随机盐的登录认证

【代码】shiro整合springboot的随机盐的登录认证。

虾米大王的学习历程 206

告别偏移地址!用C# S7PLUS驱动读写西门子S7-1500符号地址(TIA Portal V17+环境配置)

本文详细介绍了如何在TIA Portal V17+环境中使用C# S7PLUS驱动读写西门子S7-1500 PLC的符号地址,告别传统的偏移地址方式。通过配置OpenSSL、集成S7PLUS驱动库,以及实战案例展示符号地址的读写方法,显著提升代码可读性和维护效率。文章还涵盖了环境准备、高级配置及常见问题解决方案,助力工业自动化开发者实现更高效的PLC通讯。

weixin_28720767的博客 317

spring-security随即盐加密

示例demo public static void main(String[] args) { String password = new BCryptPasswordEncoder().encode("123456789"); String password2...

chiyi6591的博客 338

使用MKL+Eigen求解稀疏矩阵方程组

问题:求解Ax=b的解,其中,A为大型稀疏矩阵,长和宽分别为1500^2。 一般思路: (1)A为对称正定矩阵,对A使用cholesky分解。 (2)A为对称不定矩阵,使用LDL‘分解,即: PAP'=LDL' 其中,L为单位下三角矩阵,D由阶数为1或者2的对角块构成,P是置换矩阵。 (3)不对称矩阵:LU分解。 (4)长方形矩阵(长...

薛晓伟 3445

风力摆控制系统 PCB 设计 3 要点:STM32+MPU6050+空心杯电机驱动一体化

本文详细解析了风力摆控制系统PCB设计的3大核心要点,重点介绍STM32主控、MPU6050姿态传感器与空心杯电机驱动的一体化方案。通过系统架构设计、PCB布局布线技巧以及噪声抑制方案,帮助参赛者在电子设计竞赛中构建高精度、高稳定性的风力摆控制系统,提升竞赛作品性能。

weixin_30363285的博客 359

SpringSecurity——BCryptPasswordEncoder加密和对密码验证的原理

BCryptPasswordEncoder使用哈希算法+随机盐来对字符串加密。因为哈希是一种不可逆算法,所以密码认证时需要使用相同的算法+盐值来对待校验的明文进行加密,然后比较这两个密文来进行验证。BCryptPasswordEncoder在加密时通过从传入的salt中获取real_salt用来加密,保证了这一点。

HD243608836的博客 4112

基于单片机控制的开关电源设计

采用开关电源技术和MCU模块,凭借可靠性高、易于调适的特点,可以更高效地发挥出二者的优势,从而实现更好的组合。stm32的起动模式是通过Boot0和Boot1两个管脚的高低电平来决定的,当stm32被供电之后,这两个管脚的电平。在 VCC上,键盘的一头(列线)被连接到 VCC上,而在“0”的编程输出中,则用来进。,在开关管打开的情况下,由输入电力供给电流,感应装置存储   Buck变换器是一种非隔离式的电压转换器[10]整流电路对输入电压进行整流,再经过滤波电路,即Dc电压是直流/直流变换器的直流输入。

QQ1694456187的博客 2308

加盐算法:手撕+Spring Security、提高密码安全性的必杀技

本文介绍了加盐算法在密码哈希中的应用,以及如何通过手写加盐算法来增强密码的安全性。同时,还介绍了如何在Spring Security中集成加盐算法以提高用户身份验证的安全性。具体内容包括MD5加密、加密解密过程、加盐算法的实现方法以及在项目中的应用。最后,作者提供了一些代码示例和操作步骤,帮助读者更好地理解和应用加盐算法。

GoodManS的优快云 2962

DAGGER vs 传统模仿学习:为什么数据聚合能提升模型性能?

本文深入对比了DAGGER与传统模仿学习,揭示了传统方法因“分布不匹配”导致性能下降的根源。DAGGER通过动态的**数据聚合**机制,在智能体自身策略产生的状态分布上收集专家数据,从根本上解决了误差累积问题,从而显著提升了模型在实际部署中的鲁棒性和性能。

weixin_29170327的博客 234

在 Linux/Debian/Ubuntu 上使用 Brasero 刻录光盘

在 Ubuntu 系统中,Brasero 是一个非常方便的光盘刻录工具。无论是创建数据光盘、音频光盘还是刻录光盘镜像文件,Brasero 都能轻松胜任。本文将介绍如何在 Ubuntu 上安装和使用 Brasero 进行光盘刻录。

I AM COMING BACK... 3545

springboot+shiro

springboot+shiro的学习Shiro简介shiro的核心架构shiro认证普通的认证过程自定义Realm认证MD5+随机盐方式认证自定义加密Realm认证shiro授权授权方式授权实现自定义Realm授权web项目中使用shiro(springboot)认证大概过程MD5+随机盐进行注册MD5+随机盐进行认证授权过程基于角色的授权基于权限的授权 Shiro简介 Shiro是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速轻

weixin_42465093的博客 702

Python爬虫:抓取专利数据并分析专利趋势

本文展示了如何使用 Python 爬虫技术抓取中国专利数据,并对数据进行了清洗、分析和趋势预测。通过分析专利数据,企业和科研机构可以了解行业的技术发展趋势,进行技术创新战略规划。未来,我们可以进一步扩展爬虫的功能,抓取更多专利数据,增加多维度的数据分析,如技术领域、地域分布等。同时,可以尝试使用深度学习模型(如 LSTM)进行时间序列预测,以获得更准确的专利趋势预测。

2201_76125261的博客 1787

springboot整合shiro、Md5加密注册

1.首先实现用户注册,在service层实现对明文密码进行md5加密 //用户注册的控制器方法 @RequestMapping(value="/adduser") @ResponseBody public Map addUser(HttpServletRequest request) { String username=HttpServletRequestUtil.getString(request,"username"); String passwo

lane_zhou的博客 500

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Shrio相关知识

Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份 认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。

weixin_54505261的博客 315

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

shrio安全框架的认证和授权

Shiro安全框架简介

gja586974的博客 394

Shiro-编程不良人

(视频:https://www.bilibili.com/video/BV1uz4y197Zm?from=search&seid=9309251465991631178&spm_id_from=333.337.0.0) 一:权限的管理 什么是权限管理: 什么是身份认证: 什么是授权: 二:什么是 Shiro 三:Shiro 的核心架构 四:Shiro中的认证 五: 六: ...

张老师的博客 5636

SpringBoot与Shrio(四)缓存部分

索引引Cache Manager 引 因为每次都要查一遍数据库拿授权,更别说用户特别多,并发什么的了,数据库负担太大,所以就要启用缓存 Cache Manager shiro架构里边有一个管理缓存的组件,默认用ehcache实现,看一下它的缓存管理 public abstract class CachingRealm implements Realm, Nameable, CacheManagerAware, LogoutAware { private static final Logger log

梦回乌托邦 333

Shiro 实战教程

Shiro 实战教程 1.权限的管理 1.1 什么是权限管理 ​ 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 ​ 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 1.2 什么是身份认证 身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户

qq_43842093的博客 1444

随机盐生成类——SaltUtils

       用户在注册账户时,通常在后端的业务部分会对用户的密码进行加密处理,大多采用 md5 + salt + 散列。盐是一定长度的随机乱码(字母、数字、特殊符号),每次都是随机生成的,所以可以写一个随机盐生成类来完成随机盐的生成。 public class SaltUtils { public static String getSalt(int n){ char[] chars = ("ABCDEFGHIJK

weixin_42822484的博客 4294

学习springboot时的各种工具类

随机盐生成: package com.bjpowernode.springboot.Utils; import java.util.Random; public class SaltUtil { public static String saltUtil(int n) { char[] chars = "ABCDEFGHIJKLNMOPQRSTUVWXYZabcdefghijklnmopqrstuvwxyz1234567890!@#$%^&*()".toCharAr

weixin_43740023的博客 691

shiro(二)盐加密和shiro认证

文章目录1.盐加密2.ssm整合shiro认证 1.盐加密 什么是盐加密: 加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联。无论何时只要口令改变,随机数就改变。随机数以未加密的方式存放在口令文件中,这样每个人都可以读。不再只保存加密过的口令,而是先将口令和随机数连接起来然后一同加密,加密后的结果放在口令文件中。 如何使用盐加密: 首...

遥是此间桃花庵 341

SpringBoot整合Shiro

SpringBoot整合Shiro

少年有事问春风 1429

【密码加密方式——Md5+盐】

Md5+盐加密介绍 demo演示 源码观察

weixin_43434080的博客 6304

MD5算法+盐Salt

1、MD算法的基的概念    MD5算法是典型的消息摘要算法,其前身有MD2、MD3和MD4算法,它由MD4、MD3和MD2算法改进而来。不论是哪一种MD算法,它们都需 要获得一个随机长度的信息并产生一个128位的信息摘要。如果将这个128位的二进制摘要信息换算成十六进制,可以得到一个32位的字符串,故我们见到的 大部分MD5算法的数字指纹都是32为十六进制的字符串。 2、MD算法的...

weixin_30378311的博客 1791

spring-shiro(三)-- spring boot + mybatis +shrio+spring mvc

前面对shiro记性了一些逻辑的操作,和具体的代码片段的操作,现在将我写的一个小的案例,总结一下。总结完明天就上班了。 本案例使用的是spring boot + spring mvc +mybatis 项目的结构 首先对pom文件进行操作 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;project xmlns="http://ma...

weixin_38297879的博客 1096

SpringBoot2.2+shrio实现简单的注册,登陆验证

1.什么是shrio? 官方定义 意思是: Apache Shrio是一个强大且使用简单的Java加密框架,可以进行验证,授权,加密和会话管理。Shrio有简单且容易理解的API,你可以快速且容易的保护任何应用程序——小的移动应用程序和更大的企业级和web网站(纯属个人翻译,没有用第三方翻译) 官网地址:http://shiro.apache.org/ 源码地址:项目源码 2.什么是Authen...

LynneZoe的博客 525
上一篇: SpringBoot与Shrio(一)简单登录退出
下一篇: 关于Kettle和webService的一个Demo,整整思路
献 丑
博客等级 码龄8年 10粉丝 61原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值