shiro 没有权限怎么返回json

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shiro 没有权限怎么返回json相关的知识,希望对你有一定的参考价值。

参考技术A 权限分配要看你自己设置什么样的用户, 能拥有什么权限,如:管理员能浏览所有的页面, 能进行增删查改,普通用户只能浏览公开的页面,只能查看,和修改等。 数据库表设计方面,建议你增加一张权限表, 权限表和用户表建立关系本回答被提问者采纳

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学科讲师提供此文章!

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


以上是关于shiro 没有权限怎么返回json的主要内容,如果未能解决你的问题,请参考以下文章

Shiro权限控制-区分Ajax请求

springMvc+shiro做权限管理,页面上的静态资源,样式图片等没有出现,用几种方式过滤试过,还是不行

您可以在没有角色和权限的情况下将 Shiro 用于 Grails 吗?

你没有权限... spring security shiro

003-基于URL的权限管理[没有结合shiro]

shiro 怎么自动实现对路径权限的分配