shiro讲解,以及SpringBoot微框架集成shiro完成登录拦截器功能。

整合shoir 📍doGetAuthorizationInfo()方法:用于处理Shiro的授权,获取用户的角色和权限信息。shiroFilterFactoryBean():配置Shiro的过滤器工厂,用于设置过滤条件和跳转条件。securityManager():配置Shiro的安全管理器,主要是配置Realm的管理认证。myShiroRealm():将自定义的Realm加入容器中,用于Shiro的认证和授权。shiro-spring:提供Apache Shiro安全框架的Spring集成。 阅读详情

一:shiro是什么?

1.shiro是什么

    shiro是apache开源组织开发的一套开源的安全(权限)框架,跨语言跨平台,能在B/S架构上运行,也能在C/S架构上运行。

2.shiro与传统权限的区别

shiro是对传统的五表权限进行了封装,shiro把用户的认证(登录)和授权(用户赋权限)功能进行了封装处理,使权限操作更加简便,shiro需要传统五表权限来维护用户 角色 权限之间的关系。

3.shiro的原理(运行流程)

   securityManager  安全管理中心(shiro的所有操作都由它来完成)

   Authenticator  认证 (登录)

   Authorizer 授权(使用当前登录用户的id到数据库中查询用户所拥有的权限)

   Realm 域  用来连接关系型数据库 执行对应的sql语句

   Subject 主体 当前的登录用户 相当于五表权限中的session

认证流程:

二:SpringBoot微框架集成shiro完成登录拦截器功能。

认证流程:

1.首先在pom.xml配置文件中引入shiro所需要的jar包

    <!--shiro所需要的jar包-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>

2.包结构下创建子包shiro,创建类为ShiroConfig

ShiroConfig:

package com.jk.shiro;

import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.apache.shiro.mgt.SecurityManager;

import java.util.LinkedHashMap;
import java.util.Map;

@Configuration//把当前类 作为spring配置文件使用
public class ShiroConfig {


    /**
     * shiro 的过滤器链
     *       shiro的核心总入口
     *
     * */
    @Bean
    public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {

        System.out.println("ShiroConfiguration.shirFilter()");
        // shiro过滤器工厂
        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();

        // 必须设置 SecurityManager 如果不设置就无法完成认证和授权
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 过滤器链
        Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();

        // 配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
        // logout shiro定义好的过滤器名字 /logout访问路径
        // 浏览器访问的地址栏路径中以/logout结尾的路径 走logout过滤器
        // logout会清除session 退出登录
        //第一个参数是前台发送的路径
        filterChainDefinitionMap.put("/logout", "logout");
        // 所有的css文件走  anon过滤器 此过滤器代表放过拦截 不需要权限也能访问
        filterChainDefinitionMap.put("/css/**", "anon");
        // 放过登录页面拦截
        filterChainDefinitionMap.put("/toLogin", "anon");
        filterChainDefinitionMap.put("/img/**", "anon");
        filterChainDefinitionMap.put("/js/**", "anon");
        /// **代表所有路径 除以上路径外都拦截 authc代表权限拦截过滤器
        filterChainDefinitionMap.put("/**", "authc");
        // perms权限过滤器 必须拥有某项权限才能访问对应路径
        // filterChainDefinitionMap.put("/add", "perms[user:query]");
        // 登录请求路径 登录页面提交form表单时 表单的action写此路径
        shiroFilterFactoryBean.setLoginUrl("/login");
        // 登录成功跳转到登录成功页面
        shiroFilterFactoryBean.setSuccessUrl("/index");
        // 未授权界面;
        //shiroFilterFactoryBean.setUnauthorizedUrl("/warning");
        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
        // 最终返回过滤器链
        return shiroFilterFactoryBean;

    }



    @Bean // 在xml文件中配置一个bean标签 相当于<bean class="
    // org.apache.shiro.mgt.SecurityManager"
    // name="securityManager"></bean>
    public SecurityManager securityManager() {

        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();

        // 设置realm. 域(数据源 用来连接数据库完成认证和授权)
        // 把自己创建的Realm 注入到securityManager中
        securityManager.setRealm(myShiroRealm());

        // 注入缓存管理器;
        //securityManager.setCacheManager(ehCacheManager());//
        // 这个如果执行多次,也是同样的一个对象;
        // securityManager.setRememberMeManager(rememberMeManager());

        return securityManager;

    }

    @Bean
    public MyRealm myShiroRealm(){
        return new MyRealm();
    }
}

3.接着在shiro包中手动创建realm,MyRealm类

package com.jk.shiro;

import com.jk.model.UserBean;

import com.jk.service.UserService;
import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;


public class MyRealm extends AuthorizingRealm {

    //注入Servie层
    @Autowired
    private UserService userService;

    //认证方法
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //获取到输入框输入的用户名
        String userName = (String)token.getPrincipal();
        //去后台查是否有此账号
        UserBean user = userService.queryUserByName(userName);
        //判断账号是否存在
        if(user == null){
            //如果用户对象为空 抛出用户名错误异常
            throw new UnknownAccountException();
        }
        //认证器 第一个参数为用户名或用户对象 第二个参数为密码 第三个参数为当前real名称
        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(userName,user.getPassword(),this.getName());
        return simpleAuthenticationInfo;
    }

    //授权方法
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }
}

4.创建LoginController写自己的登录逻辑

package com.jk.controller;

import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UnknownAccountException;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class LoginController {

    /**
     * 当用户名密码不正确时
     * 跳转到此方法
     * 认证失败之后会进入此方法 提示用户失败原因
     * @return
     */
    @RequestMapping("login")
    public String login(HttpServletRequest request, ModelMap map){
        //认证器会根据对应的错误 返回对应的异常 根据异常判断对应错误
        String exceptionClassName = (String) request.getAttribute("shiroLoginFailure");

        if(UnknownAccountException.class.getName().equals(exceptionClassName)
                || AuthenticationException.class.getName().equals(exceptionClassName)){
            System.out.println("request = [ 用户名异常]");
            map.put("message","用户名错误");
        }else{
            System.out.println("request = [密码异常]");
            map.put("message","密码错误");
        }
        return "login";
    }
    @RequestMapping("toLogin")
    public String toLogin(){
        //登陆页面
        return "login";
    }
    @RequestMapping("index")
    public String toIndex(){
        //主页面
        return "main";
    }
}

5.templates文件夹下创建login登录页面

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Insert title here</title>
</head>
<body>
      <!--action="login" 写配置文件中的LoginUrl中内容  -->
      <form action="login" method="post">
           <!--username shiro默认的用户名属性  -->
           <input type="text" name="username"/><br/>
           <!--password shiro默认的密码属性 -->
           <input type="password" name="password"/><br/>
           <input type="submit" value="登录"/><br/>
      </form>
</body>
</html>

6.访问http://localhost:8080(你的端口号)/tologin 完成登录

完毕!

Shiro 身份验证流程 Shiro 用户身份验证过程介绍 阅读详情

相关推荐

SpringBoot之整合Shiro(最详细)

pom.xml 2.3 创建前端页面 在webapp文件夹中创建index.jsp和login.jsp index.jsp login.jsp 2.4 配置视图信息 application.properties 2.5 解决IDEA冲突问题 JSP 与IDEA 与SpringBoot存在一定的不兼容,修改此配置即可解决 pom.xml 3.2 自定义Realm 在shiro文件夹下创建realm文件夹 3.3 Shiro配置 在config文件夹中创建ShiroConfig.java 3.4 启动测试 输入

m0_67392273的博客 2万+

Shiro 权限管理入门之认证与授权

Shiro权限管理什么是权限管理?什么是身份认证?什么是授权?ShiroShiro 的核心架构3.2 SecurityManager3.3 Authenticator3.4 Authorizer3.5 Realm3.6 SessionManager3.7 SessionDAO3.8 CacheManager3.9 Cryptography 权限管理 什么是权限管理? 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现 对用户访问系统的控制,按照 安全规则 或者 安全策略 控

萌宅鹿的技术小屋 1008

Springboot2.x 整合shiro JWT redis 前后端分离

前言 原文地址:Springboot2.x 整合shiro JWT redis 前后端分离 如果你还对Shiro不太了解,请先看完上个教程:springboot2.x 整合shiro 本文整合shiro与JWT,其中数据库采用 用户->角色->权限 三层,JWT有token和refreshToken,其中refreshToken存储用的是redis,下面我们会一一介绍。 正文 流程 我...

weixin_43223929的博客 3346

SpringBoot整合Shiro环境搭建与配置拦截器

SpringBoot整合Shiro环境搭建与配置拦截器

qq_43880100的博客 3393

保姆级教程:用Vue3+Element Plus快速搭建Flowable流程定义管理后台界面

本文提供了一份详细的Vue3+Element Plus教程,指导开发者快速搭建Flowable流程定义管理后台界面。从项目初始化、核心页面设计到响应式数据处理,全面覆盖前端开发关键步骤,帮助提升企业级应用开发效率。

weixin_42662293的博客 475

PINN内嵌物理知识神经网络入门及文献总结

内嵌物理知识深度学习方法(PINN)已经成功用于解决各类科学计算问题,其本质是将物理先验知识嵌入神经网络训练中,将一个求解PDE的问题转化为一个优化问题。这篇博客主要记录PINN相关论文

山里娃的博客 7万+

apache shiro jar包_只需要6个步骤,springboot集成shiro,并完成登录

小Hub领读:导入jar包,配置yml参数,编写ShiroConfig定义DefaultWebSecurityManager,重写Realm,编写controller,编写页面,一气呵成。搞定,是个高手~上面一篇文章中,我们已经知道了shiro的认证与授权过程,这也是shiro里面最核心常用的基础功能。现在我们把shiro集成到我们的项目中,开始搭建一个有认证和权限体系的项目,比如用户中...

weixin_39956558的博客 872

UDS(三)网络层时间参数

网络层定义了N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs六个时间参数。 网络层在检测到错误的时间传递至上层使用者 1.当N_As 超时时,即发送方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.comfirm指示 2.当N_Ar超时时,即接收方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.co

weixin_44522306的博客 1万+

SpringBoot:集成Shiro之拦截器配置

拦截器分类说明 在配置拦截器之前,我们需要先了解Shiro本身给我们提供的拦截器都有什么,都有着什么样的特点.下面我们就来用表格的形式来看一下各种拦截器的特点. 简写(加粗为常用) 名称 优先级(1为最高) 说明 对应Java类 anon 匿名拦截器 1 不需要登录就能访问,一般用于静态资源,或者移动端接口 org.apache.shiro.web.filter.authc.AnonymousFilter authc 登录拦截器 2

weixin_45915206的博客 716

vscode+keil嵌入式软件开发全流程

vscode+keil嵌入式软件开发全流程

AspringQ的博客 6778

MATLAB实战:四桥臂逆变器3D-SVPWM调制算法仿真全流程(附代码)

本文提供了一份完整的MATLAB/Simulink实战指南,详细解析了四桥臂逆变器的3D-SVPWM调制算法仿真全流程。文章从工程实践出发,手把手指导如何搭建模型,涵盖从abc静止坐标系变换、三维空间矢量区域判定、作用时间计算到PWM信号生成与调试等核心环节,并附有代码示例和常见问题解决方案,旨在帮助工程师快速掌握这一应对不平衡负载的高效调制技术。

qsc90123456的博客 233

一看就懂!基于Springboot 拦截器的前后端分离式登录拦截

之前写过一篇关于Springboot+Shiro实现前后端分离的权限管理系统。但是由于使用了框架,对于一些小系统,实在用不上Shiro,而且还要加上学习成本。今天就来用原生的Spring技术实现登录拦截。 前后端分离 要实现前后端分离,需要考虑以下2个问题: 1. 项目不再基于session了,如何知道访问者是谁? 2. 如何确认访问者的权限? 前后端分离,一般都是通过token实现,本项目也是...

大誌的博客 2万+

飞牛fnNAS文件的超快检索

本文介绍了如何在NAS系统中部署fsearch文件搜索工具,以解决海量文件检索效率低下的问题。通过Docker容器部署ayound/file-search镜像,建立缓存和数据目录后,用户可通过8012端口访问fsearch界面。该工具支持快速关键字检索,速度媲美PC端的Everything,但需等待索引完成才能获得完整结果。虽然文件预览功能有待完善,但其高效的搜索性能值得推荐。文章还提及可通过zerotier实现远程访问,并提供了相关技术博客的参考链接。

dgnankai的专栏 1146

springboot整合shiro最全功能

springboot整合shiro,实现登录认证,登录过期,权限拦截 1、权限控制的两种方式:粗粒度基于URL级别权限控制、细粒度基于方法级别权限控制 2、基于Apache Shiro实现登录认证和权限控制,重点讲解shiro权限控制流程、自定义Realm对象控制系统认证和授权 3、Apache Shiro实现细粒度方法级别权限控制 4、动态系统菜单显示功能 5、对认证和授权数据进行缓存优化 粗粒...

qq_41714882的博客 3130

CRMEB开源电商系统 /api/products SQL注入漏洞复现(CVE-2024-36837)

2024年6月,CRMEB开源电商系统发布了新补丁,修复了一处SQL注入漏洞(CVE-2024-36837)。经分析,该漏洞可以通过请求api的路径接口来进行SQL注入,进而可能导致敏感信息泄露,该注入可暴露后台web绝对路径,深入利用可获取服务器权限,该漏洞无前置条件且利用简单,建议受影响的用户尽快修复漏洞。

0xSec 2880

【100分】【等和子数组最小和】

逆序排序,这样能够使得在分组时优先选取较大的元素,以便将元素分配到较小的子集中,从而使得每个子集的和相对均衡。给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。分成若干个组,使得每组的和相等,并求出满足条件的所有分组中,组内元素和的最小值。在递归的过程中,我们需要注意一个优化点,即避免将相同和的桶重复计算。4 个子集(5),(1,4),(2,3),(2,3)2 个子集(5, 1, 4),(2,3, 2,3)个子集,则返回子集和的最小值,如果不能,则将。

weixin_54707168的博客 1167

⭐图例结合超硬核讲解shiro⭐

shiro目录前言一、shiro简介二、shiro简单使用三、身份验证3.1.环境准备3.2.登录/退出四、shiro授权4.1.shiro授权的三种方式:4.2.实现4.3.自定义Realm进行授权五、与SpringBoot集成案例六、shiro各个拦截器对比及使用配置6.1.各种拦截器的特点6.2.INI文件配置拦截器6.3.代码形式配置拦截器6.4.简单使用 前言 目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Se

白大锅的博客,毕设WangLoveBai_999 6万+

WINCC7.3破解文件

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

springboot+ssm+shiro做简单的登录功能

创建一个springboot+ssm项目 导入shiro依赖 编写shiro的配置文件 测试 目录 创建一个springboot+ssm项目 导入shiro依赖 编写shiro的配置文件 测试 一、详情请见https://blog.youkuaiyun.com/qq_41816742/article/details/108624574 二、导入shiro依赖 三、 shiro的配置文件 自定义MyRealm数据源 UserMapper写Sql语句 ..

qq_41816742的博客 630

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

springboot+shiro实现权限校验及shiro讲解

背景 笔者在学习了张开涛老师讲解的shiro课程后,对其述内容做了自己的总结。由于张开涛–跟我学shiro一文中利用shiro配置文件简单的写了一个小Demo,所以笔者结合自己的理解采用springboot+mybatis+shiro的框写了一个单系统下、前后端分离的Demo。如有理解错误的地方,欢迎大家指正。 shiro简介 shiro是Apache旗下提供的一套JAVA安全框架,主要用于权限校验。其实spring也提供了一套权限架构即:Spring Security。在实际开发项目中,shiro所提供的

baoaibao的博客 1452

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SpringBoot集成shiro+shiro-redis实现登录、授权访问和多端登录控制

目录 1、导入依赖 2、配置文件 2、配置shiro拦截器机制 4、定义session管理器MySessionManager 5、配置多设备同时登陆只保证一次有效(此处借鉴网上大佬们) 6、Shiro核心配置(部分配置注释参照博文大佬们信息) 7、跨域配置拦截器AuthenticationFilter 8、Shiro常用工具类封装ShiroUtil 9、登录请求 10、响应信息ObjectResponse 11、博文参考 1、导入依赖 <dependency>

一直在水些技术小文 599

shiro如何去掉弹出提示框登录_Servlet整合Shiro(四)

戒色诗: 二八佳人体似酥,腰间仗剑斩凡夫。虽然不见人头落,暗里教君骨髓枯。一. Shiro 配置文件的四大部分在 shiro.ini 这个配置文件中, 有四个部分, [main], [users],[roles], 还有一个 [urls], 前面三个部分,我们都讲解了,只剩下一个 urls。这儿进行讲解一下。一. 一 [main] 部分提供了对根对象securityManager及其依...

weixin_39541227的博客 1460

SpringBoot整合Shiro

1,前言 在以往的权限管理中,我们的权限管理通常是有以下几个步骤: 创建用户,分配权限。 用户登录,权限拦截器拦截请求,识别当前用户登录信息 从权限表中判断是否拥有权限 从以上步骤中可以提取到以下三个问题。 1.如何让Shiro拦截请求。     在web开发中,Shiro会提供一个拦截器来对请求进行拦截。 2.Shiro如何判断发起请求用户的身份?     在web开发中,会借助session来判断,如果禁用了

WDH_05的博客 506

Shiro 核心功能案例讲解 基于SpringBoot 有源码

Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法。本章使用SpringBoot快速搭建项目。整合SiteMesh框架布局页面。整合Shiro框架实现用身份认证,授权,数据加密功能。通过本章内容,你将学会用户权限的分配规则,SpringBoot整合Shiro的配置,Shiro自定义Realm的创建,Shiro标签式授权和注解式授权的使用场景,等实战技能,...

ITDragon博客 4479

SpringBoot:集成Shiro之INI配置篇(转载)

前言 在SpringBoot:集成Shiro之INI认证篇和SpringBoot:集成Shiro之INI授权篇 两篇需要使用到INI文件,这一篇文章是用来简单阐述以下INI的的编写格式以及组成模块.(大部分是转载内容,只是加以整理而已.) #用户 [users] root=123456,role1 admin=admin,role1,role2 #角色和权限 [roles] role1 = permission1 role2 = permission2,permission3 Shiro中INI的构.

得不到的永远是骚栋. 702
上一篇: 记一次Idea中在html引入了Jquery,却还是提示“unresolved function or method $()”的解决方法
下一篇: SpringBoot 集成 Shiro 加入Ehcache缓存
听风动
博客等级 码龄8年 63粉丝 90原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

听风动

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

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

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

打赏作者

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

抵扣说明:

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

余额充值