Shiro权限管理框架-@RequiresPermissions 注解 使用问题记录
背景:
需要在springboot项目里面用到shiro的权限管理,Shiro访问控制流程:先shiro认证(登录时调用) 然后 shiro授权,但是项目里面登录的功能用的公司统一的系统,所以需要“绕过”shiro认证,
解决方式是:在用户访问需要鉴权的接口之前,通过硬编码的方式进行shiro认证。
使用@RequiresPermissions("sys:user:shiro"):
在指定接口上面添加@RequiresPermissions("sys:user:shiro")进行权限控制会先进行shiro授权,若有进行shiro认证(登录),流程为: 依次调用@Aspect切面类(如果有定义) ==>shiro授权==>目标方法。
若无shiro认证(登录),则直接报错。目前(2020/12/03)还没有找到使用使用@RequiresPermissions注解并且可以“绕过”shiro认证的方法,所以暂时放弃使用此注解。
不使用@RequiresPermissions("sys:user:shiro"):
如果不使用@RequiresPermissions注解,麻烦点的方式就是直接硬编码,在每个需要权限管理的接口里面硬编码会造成代码冗余,所以选择了配置@Aspect切面类,在满足的 切入点Pointcut 表达式中的方法
执行前增加自定义验证逻辑,符合条件则继续执行,否则终止目标接口的执行,代码如下。
@Aspect
@Component
@Order(value = 3)
public class ShiroAuthenticationAspect {
private static final Logger logger = LoggerFactory.getLogger(ShiroAuthenticationAspect.class); @Pointcut("execution(public * cn.wj.fdata.console.controller.AuthorityManagementController.*(..) )")
public void controllerPointcut() {
} @Around("controllerPointcut()")
public Object around(ProceedingJoinPoint joinPoint) {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = requestAttributes.getRequest();
Object ret = null;
String userName = getLoginUid(request);
logger.info("loginName="+userName);
try{
// 自定义验证逻辑,符合条件则继续执行,否则终止方法的执行
// 1、进行Shiro认证(登录)
Subject subject = ShiroUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(userName, "");
subject.login(token);
logger.info("登录成功"); boolean permitted = subject.isPermitted("sys:user:shiroAA");
if(permitted){ // 2、有对应权限则执行方法
ret = joinPoint.proceed();
logger.info("{}环绕proceed,结果是 :{}" , request.getRequestURL(), ret);
}else{
logger.info("{}环绕proceed,不满足条件未执行",request.getRequestURL());
Message<Object> message = new Message<Object>();
message.setCode(FdataConstants.EXECUTE_USER_NOPOWER_ERROR);
message.setMsg("无操作权限!");
ret = message;
}
}catch (Throwable e) {
logger.error("error", e);
}
return ret;
} private String getLoginUid(HttpServletRequest request) {
Object attribute = request.getAttribute("fsmart.login.uid");
return (String)attribute;
}
}
Shiro权限管理框架-@RequiresPermissions 注解 使用问题记录的更多相关文章
- Shiro权限管理框架(五):自定义Filter实现及其问题排查记录
明确需求 在使用Shiro的时候,鉴权失败一般都是返回一个错误页或者登录页给前端,特别是后台系统,这种模式用的特别多.但是现在的项目越来越多的趋向于使用前后端分离的方式开发,这时候就需要响应Json数 ...
- Shiro权限管理框架(一):Shiro的基本使用
首发地址:https://www.guitu18.com/post/2019/07/26/43.html 核心概念 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码 ...
- Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享
首发地址:https://www.guitu18.com/post/2019/07/28/44.html 本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式环境下的Session共享. ...
- Shiro权限管理框架(三):Shiro中权限过滤器的初始化流程和实现原理
本篇是Shiro系列第三篇,Shiro中的过滤器初始化流程和实现原理.Shiro基于URL的权限控制是通过Filter实现的,本篇从我们注入的ShiroFilterFactoryBean开始入手,翻看 ...
- Shiro权限管理框架(四):深入分析Shiro中的Session管理
其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻.最后 ...
- Shiro权限管理框架详解
1 权限管理1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被 ...
- shiro权限管理框架与springmvc整合
shiro是apache下的一个项目,和spring security类似,用于用户权限的管理‘ 但从易用性和学习成本上考虑,shiro更具优势,同时shiro支持和很多接口集成 用户及权限管理是众多 ...
- Shiro权限管理框架
一.Shiro介绍 Apache Shiro 是Java 的一个安全框架.Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在JavaEE 环境.Shiro 可以 ...
- Shiro 权限管理框架
一.什么是Shiro Apache Shiro是一个强大易用的java安全框架,提供认证.授权.加密和会话管理等功能 · 认证:用户身份识别,俗称“登录”: · 授权:访问控制 · 密码加密:保护或隐 ...
- (转)shiro权限框架详解02-权限理论介绍
http://blog.csdn.net/facekbook/article/details/54893042 权限管理解决方案 本文主要介绍权限管理的解决方法: 粗颗粒度和细颗粒度 基于url拦截 ...
随机推荐
- ES6 - Class - 继承
Class 其实是一个语法糖,他能实现的,ES5同样能实现 ES5 //手机 function Phone(brand,price){ this.brand = brand; this.price = ...
- Redis设计实现-学习笔记
最近在准备面试,问到redis相关知识,只能说个皮毛,说的既不深入也不全面,所以抓紧突击一下,先学<redis设计与实现>. 选择看书的原因是: 书中全面深入,且能出书一定十分用心: 搜博 ...
- python3.7 sorted 自定义排序
from functools import cmp_to_keyls=['9','23','3','56','78']sorted(ls, key=cmp_to_key(lambda x, y: in ...
- gitee提交过程
https://gitee.com/ 一个线上代码云端软件开发协作平台 首先注册一个账号 然后添加新的仓库 仓库名称和路径是必填项 然后创建项目 选择 克隆存储数据库 存储库位置是网站获取的git位 ...
- nchu第二次面向对象编程博客作业
前言: 本次博客包含的内容有pta题目集4(四边形).5(五边形)以及期中考试三次题目集.其中第四次和第五次题目集难度较大,比较复杂,涉及的知识点也比较多.而期中考试由于是在课堂上完成,难度较小, ...
- HTML复习(17.表格样式)
重点 掌握caption-side(表格标题位置) 掌握border-collapse(表格边框合并) 掌握border-spacing(表格边框间距) 表格标题位置在CSS中,我们可以使用capti ...
- 记录一个二级域名绑定动态ip的操作
家里的路由器,还有一台路由器需要登录,以前一直用f3322的动态域名绑定,感觉使用也还可以,但最近几个月,只要是f3322.com的二级域名全部被chrome标注为危险. 所以准备换一个免费的二级域名 ...
- 【Hive】数据倾斜原因及解决方法汇总
1)数据倾斜根本原因:由于数据分布不均匀,导致map端读取的数据分布不均匀(数据长尾分布),从而使得map处理的数据量差异过大. (2)解决思路:Hive是分阶段执行的,map处理数据量的差异取决于上 ...
- PyCharm 关闭代码风格检查
在使用PyCharm的时候,有时候,前后得空格,不然就会出现波浪线,比较烦人 关闭代码风格检查地方是:File-Settings-Editor-Inspactions-Python-PEP8 codi ...
- uniapp中使用echarts点击图例与tooltips无反应
只需要在项目main.js文件中加上 window.wx = {} // echarts中tooltips点击无反应与点击图例无反应解决方法 即可