003 Shiro的认证

一 . 概述

  认证:简单说就是登录,用户携带账号和密码信息通过Subject对象与shiro进行交互,看用户的身份凭证是否正确.

  本节需要演示认证的流程.



二 .搭建环境

  本次使用ini充当Realm对象,使用IniSecurityManager充当SecurityManager对象,这个在后面我们都会重写进行定制的,这里只是简单介绍流程.

  我们的ini文件的内容:

[users]
trek=123

这个ini文件之中,定义了一个账号为trek,密码为123的用户.



三 .流程代码

    //实现shiro的认证过程//1---------------创建SecurityManager-----------------
        //创建SecurityManager
        SecurityManager securityManager = new IniSecurityManagerFactory("classpath:shiro.ini").createInstance();
        //将当前的SecurityManager设置到当前的环境之中
        SecurityUtils.setSecurityManager(securityManager);
 //2-----创建Subject对象
        //下面实现的是一个登陆的功能
        //获取Subkect,相当与一个Currentuser
        Subject currentUser = SecurityUtils.getSubject();
 //3----封装token对象
        //创建认证需要的token
        UsernamePasswordToken token = new UsernamePasswordToken("trek","123");
 //4-调用login()方法
        //实现登录功能
        try {
            currentUser.login(token);
        } catch (AuthenticationException e) {
            logger.info("认证失败,账号为{},密码为{}",token.getUsername(),new String(token.getPassword()));
            throw new AuthenticationException();
        }

        logger.info("认证成功!!");
        

上面的代码描述的流程

[1]创建SecurityManager对象

[2]获取Subject独享

[3]用户账号和密码信息封装为token对象,这里使用最为常用的UsernameAndPassword对象.

[4]调用Subject的login()方法

[5]4中调用login()会有两种情况发生,正常执行,说明认证成功(账号和密码都是对的),抛出异常,说明认证失败.



四 .认证失败的异常AuthenticationException

从上图之中我们可以看到.shiro定义了很多的认证异常,

如,账号不存在(UnknownAccountException),密码不正确(IncorrectCredentialsException).

我们可以使用这些异常表示在认证过程之中出现的问题,这样免去了我们自定义异常的麻烦.



五 . 总结

  认证的过程十分简单,创建完环境对象之后,调用Subject的login()方法就可以了.

  认证成功,login()方法就会正常执行,否则就会出现异常,我们通过捕获异常就可以知道到底出现了什么认证问题.

原文地址:https://www.cnblogs.com/trekxu/p/9048679.html

时间: 2024-07-28 17:03:47

003 Shiro的认证的相关文章

Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:<跟我学Shiro>系列教程.但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特性介绍地非常全面详细,但是整个教程的叙述方式还是有很大缺陷的.文章与文章之间并没有很好地串联起来,每篇文章介绍的东西都过于分散了,如果是对shiro完全不了解的新手来看的话完全是一场噩梦.就像一个网友评价的这样: 看了看这个教程,看完之后都想放弃shiro了,完全看不懂,后来百度了很多别的资料才理解了sh

Shiro 登录认证源码详解

Shiro 登录认证源码详解 Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证.授权管理.企业级会话管理和加密等功能,相比 Spring Security 来说要更加的简单. 本文主要介绍 Shiro 的登录认证(Authentication)功能,主要从 Shiro 设计的角度去看这个登录认证的过程. 一.Shiro 总览 首先,我们思考整个认证过程的业务逻辑: 获取用户输入的用户名,密码: 从服务器数据源中获取相应的用户名和密码: 判断密码是否匹配,决定是否

2、Shiro的认证

Shiro的认证流程大体可以参考下面这幅图: 但是没有接触过shiro的同学看到上面的图片也不明白,下面我们来在代码中尝试体验Shiro的认证过程: 1.新建一个SpringBoot项目项目结构如下: ShiroframeApplicationTests代码: package com.shiro.shiroframe; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToke

快速理解shiro的认证

shiro的认证: 流程图: 采用测试用例的方式快速开始: 单元测试注解的执行顺序: @BeforeClass -> @before -> @Test ->@After ->@AfterClass 测试代码: public class IsSpringbootShiroApplicationTests { private DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager(); pri

Shiro身份认证、盐加密

目的: Shiro认证 盐加密工具类 Shiro认证 1.导入pom依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.apache.s

使用Shiro实现认证和授权(基于SpringBoot)

Apache Shiro是一个功能强大且易于使用的Java安全框架,它为开发人员提供了一种直观,全面的身份验证,授权,加密和会话管理解决方案.下面是在SpringBoot中使用Shiro进行认证和授权的例子,代码如下: pom.xml 导入SpringBoot和Shiro依赖: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s

shiro登陆认证

1.LoginController @RequestMapping(method = RequestMethod.POST) public String login(User user, HttpServletRequest request) { try { ubject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(user.getLoginName()

Apache shiro(3)-认证过程

自己看了看前面写的几篇博客,实在是惨不忍睹.原来觉得别人这块写的不怎么样,什么都没有讲清楚.然后自己写,结果是我写的更烂.如果你被我之前的博客摧残过了,深表歉意.实践这个事情说不清楚,来来来,我们讲道理吧还是. 认证过程 认证过程也就是对用户验明正身的过程,即确认用户输入的身份信息是正确的合法的过程.我们先看看这个认证过程的图: 就如图上所说,其实这个认证过程,是在Shiro的SecurityManager中自动完成的.我们使用的时候真正做的内容是从用户输入哪里收集用户的身份信息(用户名+密码)

Shiro权限认证

   一.权限认证核心要素 权限认证顾名思义,就是在应用系统中,控制谁能访问哪些资源.核心要素有仨:权限.角色.用户 权限:即操作资源的权利,如访问某个url,对某个模块数据进行增删改查 角色:权限的集合,一种角色可以包含多种权限.例如操作员角色可查看系统账单.进行结账操作多种权限. 用户:也就是身份认证中提到的subject一角. 二.授权 shiro授权的方式通常有三种: 1.编程式授权:在代码中进行授权操作,可基于角色和权限两种方式. 2.注解式授权:使用注解对方法或类进行授权,标注该类可