Shiro权限控制-区分Ajax请求

一、为什么要区分Ajax请求?

在前台使用EasyUI的系统中,所有的请求可以分为两大类:

1)跳转到页面

2)返回Json数据

这时当请求来了时要区分处理,如果是”跳转到页面”的请求,需要跳到没有权限的页面,否则“返回Json数据”的请求,需要返回一个Json数据{“success”:false,”message”:”权限不足!”}

二、实现原理分析

2.1 原有实现分析

原来权限执行分析:

1)当用户访问需要有权限才能访问资源;

2)会交给PermissionsAuthorizationFilter判断是否有权限;

3)如果没有权限会调用onAccessDenied这个方法完成跳转没有权限界面;

问题:由于PermissionsAuthorizationFilter onAccessDenied没有区分是否Ajax来单独处理。怎么区分?区分出来怎么处理?

2.2 新实现分析2.3.1 如何区分ajax

Ajax请求请求头如下:

非Ajax请求头如下:

只要咱们从请求头中能够获取X-Request-with的请求头说明就是Ajax请求。

2.3.2 如何处理

原生的权限处理过滤器中并没有区分AJax,所有我们要继承它,并且实现它的没有权限的方法,在里面实现Ajax的区分处理。而这些操作都需要定义新的过滤器。

对于过滤器需要经历下面的步骤:

1)定义一个过滤器的类

2)在shiro中声明过滤器的类,让它可以用来处理权限

3)配置使用新的过滤器

具体实现参考区分Ajax实现

三、区分Ajax实现3.1 定义一个过滤器的类

该类继承PermissionsAuthorizationFilter,具体实现如下:

3.2 申明为shiro的过滤器

在shiro中声明过滤器的类,让它可以用来处理权限上。

3.3 配置使用新的过滤器

四、总结

Shiro对权限的处理,并没有区分是否是Ajax请求,需要我们自己写过滤器来实现。在实现时通过获取请求头X-Request-with是否有值来区分,区分开来以后,对于普通请求直接跳转到没有权限的页面,对于AJax请求返回一个没有权限的JSon数据。

感谢源码时代Java学科讲师提供此文章!

本文为原创文章,转载请注明出处!

时间: 2024-10-20 13:40:27

Shiro权限控制-区分Ajax请求的相关文章

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

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

基于JSP的教学大纲与进度在线管理系统-java教学大纲与进度管理系统shiro权限控制

基于JSP的教学大纲与进度在线管理系统-java教学大纲与进度管理系统shiro权限控制 1.包含源程序,数据库脚本.2.课题设计仅供参考学习使用,可以在此基础上进行扩展完善.开发环境:Eclipse ,MySQL 5.1,JDK1.7,Tomcat 7涉及技术点:MVC模式.JavaWeb.JDBC.HTML.CSS.JQUERY.shiro.文件上传.购物车等. 系统没用任何框架,前台纯JSP实现,后台servlet映射,适合刚学习J2EE的新手,代码思路清晰,注解详细,数据库用的是mysq

关于 x-requested-with 请求头 区分ajax请求还是普通请求

今天做Spring MVC异常统一处理这块,在处理的时候需要区分发送过来的请求是传统请求还是ajax请求,网上有现成的代码,我是参考http://www.2cto.com/kf/201412/364393.html 里面的做法.其中的 if (!( request.getHeader("accept").indexOf("application/json") > -1 || ( request                     .getHeader(&q

Spring boot后台搭建二为Shiro权限控制添加Redis缓存

在添加权限控制后,添加方法 查看 当用户访问”获取用户信息”.”新增用户”和”删除用户”的时,后台输出打印如下信息 , Druid数据源SQL监控 为了避免频繁访问数据库获取权限信息,在Shiro中加入缓存 缓存有基于Redis和Ehcache的,本文只介绍基于Redis的 1.Shiro集成Redis的引入依赖 <dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis<

shiro权限控制配置

shiro配置流程 web.xml中配置shiro的filter spring中配置shiro的过滤器工厂,指定对不同地址权限控制 , 传入安全管理器 配置安全管理器,传入realm,realm中定义具体授权和认证的流程 配置自定义凭证匹配器,指定token和info的匹配方式. 权限访问的配置 定义所有的权限的String集合 在自定义realm中重写doGetAuthoriaztionInfo(),创建所有权限的String集合, 创建SimpleAuthorizationInfo的对象,调

bootstrap+springboot实现shiro权限控制的坑

最近在开发一个项目,需要写一个后管系统,Bootstrap是美国Twitter公司的设计师Mark Otto和Jacob Thornton合作基于HTML.CSS.JavaScript 开发的简洁.直观.强悍的前端开发框架,使得 Web 开发更加快捷.Bootstrap提供了优雅的HTML和CSS规范,它即是由动态CSS语言Less写成.使用方便. 在开发的过程中,遇到这样一个场景:针对超级管理员,我希望他拥有删除等高级别的操作,但是对于低级别的普通管理员我只是希望他拥有查看和编辑的权限.这就需

全局的异常捕获过滤器 区分ajax请求 与浏览器导航请求

建一个类ExceptionAttribute 继承 HandleErrorAttribute 重写OnException 方法 里面代码: //1.0日志记录(文本日志和数据库日志) //拿到日志 Exception exe= filterContext.Exception; //获取当前exe的最详细信息 Exception inexe = exe.InnerException==null ? exe:exe.InnerException; while (inexe.InnerExceptio

x-requested-with 请求头 区分ajax请求还是普通请求

在服务器端判断request来自Ajax请求(异步)还是传统请求(同步): 两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数 1.传统同步请求参数 accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-charset  gb2312,utf-8;q=0.7,*;q=0.7 accept-encoding  gzip,deflate accept-languag

shiro权限控制

1.1  简介 Apache Shiro是Java的一个安全框架.目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了.对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了. 本教程只介绍基本的Shiro使用,不会过多分析源码等,重在使用. Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaS