shiro认证加密流程

有关shiro 使用HashedCredentialsMatcher 认证器认证过程以及AuthenticationToken与 AuthenticationInfo 如何实现匹配的参考 SimpleAuthenticationInfo 参数 getName() 说明 springMVC springboot 也好,在实例化自定义实现类 Realm是,会调用 无参构造函数。源码中显示赋值name 属性的在类 CachingRealm 的构造函数中 public CachingRealm() { this.cachingEnabled = true; this.name = getClass().getName() + "_" + INSTANCE_COUNT.g. 阅读详情

一、shiro认证流程

  1. 获取当前的 Subject. 调用 SecurityUtils.getSubject();
  2. 测试当前的用户是否已经被认证. 即是否已经登录. 调用 Subject 的 isAuthenticated()
  3. 若没有被认证, 则把用户名和密码封装为 UsernamePasswordToken 对象
    1). 创建一个表单页面
    2). 把请求提交到 SpringMVC 的 Handler
    3). 获取用户名和密码.
  4. 执行登录: 调用 Subject 的 login(AuthenticationToken) 方法.
    @RequestMapping(value = "login",method = RequestMethod.POST)
    public String login(@RequestParam("username") String username,@RequestParam("password") String password){
    	//获取当前subject
        Subject subject = SecurityUtils.getSubject();

        //判断是否有有效凭据来证明了自己的身份,如果没有则进行登录认证
        if(!subject.isAuthenticated()){
            //1、获取提交的用户名以及密码封装为UsernamePasswordToken
            UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username,password);
            try{
                //登录认证
                subject.login(usernamePasswordToken);
            }catch (AuthenticationException ae){ /* 抛出的异常全为AuthenticationException的子类 */
                System.out.println("登陆失败:" + ae.toString());
            }
        }
        return "redirect:list";
    }
  1. 自定义 Realm 的方法, 从数据库中获取对应的记录, 返回给 Shiro.
    1). 实际上需要继承 org.apache.shiro.realm.AuthenticatingRealm 类
    2). 实现 doGetAuthenticationInfo(AuthenticationToken) 方法.
  2. 由 shiro 完成对密码的比对.
/**
 * 1. 授权需要继承 AuthorizingRealm 类, 并实现其 doGetAuthorizationInfo 方法
 * 2. AuthorizingRealm 类继承自 AuthenticatingRealm, 但没有实现 AuthenticatingRealm 中的
 * doGetAuthenticationInfo, 所以认证和授权只需要继承 AuthorizingRealm 就可以了. 同时实现他的两个抽象方法.
 */
public class MyRealm extends AuthorizingRealm {
    /**
     * 认证
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //将AuthenticationToken强转
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        //通过UsernamePasswordToken获取用户名以及密码的信息
        String username = token.getUsername();
        char[] password = token.getPassword();

        //判断查询用户情况,判断是否有改用户
        System.out.println("从数据库获取用户数据");

        //判断用户情况,抛出异常
        //用户不存在,抛出异常
        if ("unknown".equals(username)){
            throw new UnknownAccountException("用户不存在");
        }
        //如果用户被锁定,抛出异常
        if ("monster".equals(username)){
            throw new LockedAccountException("用户被锁定");
        }

        //6. 根据用户的情况, 来构建 AuthenticationInfo 对象并返回. 通常使用的实现类为: SimpleAuthenticationInfo
        //以下信息是从数据库中获取的.
        //1). principal: 认证的实体信息. 可以是 username, 也可以是数据表对应的用户的实体类对象.
        Object principal = username;
        //2). credentials: 密码.(加密方式在配置文件中通过credentialsMatcher属性配置)
        Object credentials = "e10adc3949ba59abbe56e057f20f883e"; /* 123456的加密结果 MD5加密1次 */

        //3). realmName: 当前 realm 对象的 name. 调用父类的 getName() 方法即可
        String realmName = getName();
        //4). 盐值.(防止用户同密码的状况)
        //通过该方法获取盐值(传入的属性必须是唯一的)
//        ByteSource credentialsSalt = ByteSource.Util.bytes(username);
        //输入的用户名、密码加密后的值、盐值必须和传入的值一样,才可获取认证
        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(principal, credentials, realmName);
//        info = new SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName);
        return info;
    }

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

二、加密

  1. 在配置文件中配置加密方式

替换当前 Realm 的 credentialsMatcher 属性. 直接使用 HashedCredentialsMatcher 对象, 并设置加密算法即可.

    <!--
    配置 Realm
    直接配置实现了 org.apache.shiro.realm.Realm 接口的 bean
    -->
    <bean id="jdbcRealm" class="com.shiro.test.realm.MyRealm">
        <!-- 通过配置credentialsMatcher属性来,替换realm的加密算法 -->
        <property name="credentialsMatcher">
            <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!-- 指定加密方式 -->
                <property name="hashAlgorithmName" value="MD5"></property>
                <!-- 指定加密次数 -->
                <property name="hashIterations" value="1"></property>
            </bean>
        </property>
    </bean>
  1. 通过使用SimpleAuthenticationInfo来让shiro认证
//通过该方法获取盐值(传入的属性必须是唯一的)
ByteSource.Util.bytes(username);
//传入的用户和密码均为数据库中获得
        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(principal, credentials, realmName);
        //盐值加密
//        info = new SimpleAuthenticationInfo(principal, credentials, credentialsSalt, realmName);
  1. 可以通过通过使用SimpleHash获取密码加密结果
    @Test
    public void test02(){
        String hashAlgorithmName = "MD5";
        Object credentials = "123456";
        ByteSource salt = ByteSource.Util.bytes("admin");
        int hashIterations = 1;

        Object simpleHash = new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations);
        Object simpleHash1 = new SimpleHash(hashAlgorithmName, credentials);

        System.out.println(simpleHash1);
    }
【深度避坑】Word 提示“内存或磁盘空间不足,保存失败”的真正原因与终极解决方案 这是 Word 2003 时代的老功能⚠现代 Office 使用全新的保存 API(与 OneDrive 深度集成)老插件无法兼容现代保存机制会拦截 Word 的写入流程导致保存动作失败,Word 误以为磁盘坏了,于是报错不是磁盘坏了,是 Word 被插件绊倒了。Word 无法保存 = 加载项冲突(尤其是书法 / 稿纸向导)。永久禁用即可彻底恢复。如果在写毕业论文、要交文档,强烈建议马上检查一下你的加载项,避免后期出现大规模崩溃丢稿。 阅读详情

相关推荐

pe卸载win10更新补丁_禁用Win10系统更新

众所周知,最近WIN10的强制更新导致了很多问题。如:(部分专业软件系统更新后无法使用,硬件中键盘、鼠标、指纹之类的硬件,更新补丁后失灵等问题)。而之前的禁用WindowsUpdate的方法已经失效。下面我们另辟蹊径,利用系统权限的方法使Win10无法更新,达到禁用更新的目的。1.计算机管理-服务中禁用Windows Update服务。2.打开C:\Windows\softwareDistribu...

weixin_39702479的博客 1万+

shiro笔记之----SimpleAuthenticationInfo 验证password

公司项目中用的是shiro做安全认证框架,从代码中看到了判断验证码的,也看到了判断用户名是否存在的,就是没有发现判断密码是否正确的,后从网上文章以及查看源码才大概了解shiro对于密码验证的流程。 自定义的shiroRealm public class ShiroRealm extends AuthorizingRealm { @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)

hubeilihao的专栏 8519

稀疏数据分析:马蹄估计量及其理论性质

稀疏数据分析:马蹄估计量及其理论性质基本框架half-Cauchy分布为什么它叫马蹄估计量后验均值、shrinkage与κ\kappaκθ\thetaθ的边缘先验分布的阶马蹄估计的一致性收敛速率Clarke-Barron(1990)引理马蹄估计的最优收敛速率 这是对The horseshoe estimator for sparse signal这篇论文的回顾,这篇论文在Modern Bayesian statistics与Bayesian Machine Learning领域比较重要,它提出了一种新的先验

一个不愿透露姓名的博客 3802

shiro框架的密码校验(二)

前面的内容在这里 shiro框架简单介绍以及使用(一) 上一篇简单介绍了一下shiro框架和账号验证,这篇简单写一下shiro密码校验的介绍和几种使用方式 一、加密/加盐介绍 什么是加密?什么是加盐? 1.加密:加密是以某种特殊的算法改变原有的信息数据,这样的话即使你拿到了密文,但因为你不知道加密方式也没办法知道密文的内容。比如说电报,你监听到了发的电报,但是你不知道用的是那个密码本,一样无法知道电报内容是什么。 2.加盐:加盐是指将每口令同一个叫做”盐“值相关联,我们这里用于密码加盐,盐值一般都是随机

阿沐沐的博客 3185

从内参矩阵到归一化平面:揭秘相机成像的标准化核心

本文深入解析了相机成像中的核心概念——归一化平面。通过拆解内参矩阵(包含焦距、主点等参数)的作用,详细阐述了如何将像素坐标转换为与具体相机硬件无关的归一化坐标。这一标准化过程是计算机视觉算法(如多相机系统对齐、视觉SLAM)实现跨设备通用性的关键,能有效提升算法的鲁棒性和泛化能力。

opencv7vision的博客 450

AFSim 2.9实战指南:从入门到精通的中文教程

本文是AFSim 2.9的实战中文教程,旨在帮助用户从零开始掌握这一先进的仿真框架。内容涵盖从环境安装、运行第一个“Hello World”仿真,到深入理解实体、组件、想定编辑器等核心概念,并进阶探讨动力学建模、传感器仿真与红蓝对抗想定构建。最后,指南还提供了效能分析与实战排错技巧,帮助用户将仿真结果转化为有价值的量化数据,适用于军事、航空航天等领域的复杂系统行为模拟研究。

weixin_29294395的博客 361

Shiro--密码加密

散列算法 散列算法一般用于生成一段文本的摘要信息,将内容可以生成摘要,无法将摘要转成原始内容。 散列算法不可逆 散列算法常用于对密码进行散列 常用的散列算法有 MD5、SHA 一般散列算法需要提供一个 salt (盐) 与原始内容生成摘要信息,这样做的目的是为了安全性 比如:111111 的 md5值是:96e79218965eb72c92a549dd5a330112, 拿着 96e79218...

吴声子夜歌的博客 1316

DeepBSA实战指南:从安装到基因组分析的全流程解析

本文详细解析了DeepBSA工具从安装到基因组分析的全流程,特别介绍了其简化生物信息学分析的'一键式'操作和独家深度学习算法。通过实战案例展示了DeepBSA在信噪比处理和QTL定位上的优势,并提供了Linux和Windows系统的安装避坑指南、数据预处理技巧以及算法选择建议,帮助用户高效完成基因组分析。

weixin_28732953的博客 443

安全认证框架Shiro之认证

1. 集成Spring 1. 集成Spring 导入Spring依赖包:spring-webmvc 在web.xml中配置监听、前端控制器 配置applicationContext.xml         注解驱动         扫描包         视图转换器配前.

weixin_46178852的博客 1935

详解机器人标定

这里是机器人在取料之前,先把自己的角度补正到与 物料当前角度一致,到(X’,Y’)位置处,然后移动 CDx,Cdy,与物料位置也重合,然后去取料。可以使用实物标定,机器人抓住工件摆放9个位置,得到9个机械坐标,相机也得到9个像素坐标,(机器人每次需要回到固定位置拍照),然后标定。(X0,Y0)为旋转中心, (X1,Y1)及(X2,Y2)为工件在视野中旋转角度a的前后坐标,(Xt,Yt)为两点连线的延长。(rx0, ry0)为旋转中心,( x, y)为被旋转的点,(x0,y0)旋转后的点。

weixin_56819992的博客 7631

视觉巡线小车(STM32+OpenMV)——技术总结

在现代机器人技术中,视觉巡线是一种常见的导航方式,它允许机器人通过识别和跟踪地面上的线路来自主导航。本文将总结使用STM32微控制器和OpenMV视觉模块来实现视觉巡线小车的关键技术和步骤。

weixin_66608063的博客 3078

shiro权限认证赋权,加密解密流程以及注意点

一定要写

hyly_zhard的博客 594

直方图均衡化原理及matlab和opencv实现代码

详细分析了直方图均衡化的数学原理,配有matlab和opencv实现代码

qq_21603315的博客 4778

shiro中的MD5加密及盐及认证流程的验证

MD5加密的特点: 16进制32位,不可逆(通过明文可以获取到它的密文,但是通过密文获取不到对应的明文是什么),相同的数据加密的结果都是一样的 问题:既然MD5加密是不可逆的,为什么网上有md5解谜工具,如何实现的? 网上都是通过穷举法,列举出所有情况 ,一旦密码过于复杂就破解不了 public static void main(String[] args) { //使用md5 Md5Hash md5Hash = new Md5Hash("123")..

喜羊羊love红太狼 782

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

4.Shiro认证流程2_密码比对,MD5加密,MD5盐值加密

调用自定义Realm之后 执行方法:doGetAuthenticationInfo()方法后返回AuthenticationInfo Realm是shiro中进行认证和授权的组件,自带了几种实现。自定义Realm继承AuthorizingRealm,分别实现认证和授权的方法 doGetAuthenticationInfo(AuthenticationTokentoken)是...

T_P_F的博客 595

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

shiro的基础知识储备--认证加密流程

目录使用MD5和salt进行加密再进行认证1,Md5和 salt概念2, MD5+salt+hash使用流程图3,Shiro中使用 MD5+salt+hash算法方式:(1)自定义Realm类(2)主方法调用自定义Realm测试使用MD5和salt进行加密再进行认证1,Md5和 salt概念2, MD5+salt+hash使用流程图3,Shiro中使用 MD5+salt+hash算法方式:(1)自定义Realm类(2)主方法调用自定义Realm测试 使用MD5和salt进行加密再进行认证 1,Md5和 sa

wlijun_0808的博客 401

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Shiro单Realm加密

首先,我们要明确认证的流程:   1. 获取当前的 Subject. 调用 SecurityUtils.getSubject();  2. 测试当前的用户是否已经被认证. 即是否已经登录. 调用 Subject 的 isAuthenticated()   3. 若没有被认证, 则把用户名和密码封装为 UsernamePasswordToken 对象    1). 创建一个表单页面    2). ...

weixin_30765319的博客 125

Shiro面试题总结

Shiro框架介绍 shiro安全数据源有哪些: Shiro运行流程 Shiro 的优点 比较 SpringSecurity 和 Shiro 简述 Shiro 的3个核心组件 1.Subject 2.SecurityManager 3.Realms Shiro认证过程 Shiro授权过程 Shiro 如何自实现认证 如何实现自实现授权 如何配置在 Spring 中配置使用 Shiro

GeorgeGuoo的博客 7785

shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。

文章目录前言一、逻辑1. 登录逻辑2. 开发逻辑a. redis 开发工具类b. 密码加密工具类c. shiro开发3. 项目目录结构三、shiro代码开发1. shiroConfig.java2. ShiroAccessControlFilter3. ShiroUsernamePasswordToken4. ShiroRealm5. ShiroHashedCredentialsMatcher三、redis开发四、五、六、七、 前言 shiro学习一:了解shiro,学习执行shiro的流程。使用spr

冯安晨 567

Shiro的核心概念和基本认证,以及与SpringBoot动态认证的基本步骤

Shiro核心概念 四大基石: Shiro把Shiro开发团队称为“应用程序的四大基石”——身份验证,授权,会话管理和加密作为其目标。 Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。 Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。 Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。 Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储。 也

weixin_50253745的博客 332

Shiro的基本使用及其与SpringBoot整合(一)

✍、Shiro的基本使用及其与SpringBoot整合(一)

Augenstern_QXL的博客 1203

Shiro登录认证逻辑----shiro免登录

以上是基于免密登录的需求修改的代码,自己调试得到的shiro认证逻辑,可能也不十分准确,尤其是最后的密码再次加密认证地方,源码中调用多个方法,精力有限,没有仔细深究。第一步中,我们得到了封装了前端输入的用户信息的token,第三步中,我们得到了从数据库中查询得到了真实的用户信息。即在我们项目中通过集成AuthorizingRealm类重写doGetAuthenticationInfo的方法中,返回对象做如下改变,如果你前端的密码固定是""的话,此处的秘钥是确定的,如果不是,则参考第七步的代码生成秘钥。

web17508858916的博客 1630

shiro认证流程

shiro-web认证流程 一、认证流程 访问Controller接口,获取Subject对象,实现UsernamePasswordToken,调用subject对象login方法,进入AuthenticationRealm对象中的getAuthenticationInfo方法中。 先判断缓存中是否存在认证信息,若没有跳转到自定义Realm【注册到SubjectManager中[并且在Realm中配置加密策略]】的doGetAuthenticationInfo中,通过token获取用户名调用数据库获取用户

蓄势待发 533

你真的了解Shiro框架吗?

到这里Shiro的加密和解密就说完了 其实发现 不管我们认证的过程 还是 AES加密和解密的过程 全都在DefaultSecurityManager类中的一些方法中实现的 紧接着会调用其他类。

weixin_65550121的博客 1278

Shiro 实战教程(全)

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

swy2560666141的博客 2211

Apache Shiro 认证+授权(一)

1、核心依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.0</version&g...

weixin_34265814的博客 259
上一篇: shiro+springmvc的环境搭建
下一篇: shiro多realm认证策略
magicproblem
博客等级 码龄7年 22粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值