iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springAop如何实现权限管理数据校验操作日志
  • 827
分享到

springAop如何实现权限管理数据校验操作日志

2023-06-14 05:06:29 827人浏览 泡泡鱼
摘要

小编给大家分享一下springaop如何实现权限管理数据校验操作日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言作为一个写java的使用最多的轻量级框架莫过

小编给大家分享一下springaop如何实现权限管理数据校验操作日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

前言

作为一个写java的使用最多的轻量级框架莫过于spring,不管是老项目用到的springMVC,还是现在流行的SpringBoot,都离不开spring的一些操作,我在面试的时候问的最多的spring的问题就是我们在平常的项目中使用spring最多的有哪几个点
在我看来无非就两个

  1. spring的bean管理,说的高大上一点就是spring的ioc,di

  2. spring的AOP

spring是一个很强大的轻量级框架,功能远不止这两点,但是我们用的最多的就是这两点。

spring bean 管理

想我们常用的 @Controller @Service @Component 等等都是将我们的bean交给spring管理,我们在获取bean的时候就直接通过 @Resource 就可以获取,当然@Resource 不是spring的,@Autowired 才是spring的,这样我们可以很方便的管理我们的各种bean,使用起来也很方便,不用到处new

springAOP

这个应该是spring面试最常问道的问题了,我面试的时候一般不直接问,我会说一个场景,如果面试者使用过aop立马就可以回答出来。
有这么一个场景,一个系统已经开发完成了,而且已经上线运行了一段时间,很稳定了,现在要加一个功能,就是想收集用户的操作日志,操作日志要比较细致,比如 某某人,在哪个时间点,操作了哪个模块,请求的参数是什么样子的,操作结果如何,等一些比较细致的操作。很多面试者第一时间想到的就是使用过滤器,试想一下,过滤器真的能做到记录这么细致的内容吗?有的可能会想到,我们定义一个公共的方法,所有需要记录日志的地方都去调用这个方法,等等。其实这些都不好,最好的当然是使用aop,使用aop侵入性最小,系统已经稳定运行了,不能去动之前的代码,我们做个aop就可以了,对原来的代码几乎0侵入,对系统影响最小。
那aop实现的方式有哪几种呢?aop实现的步骤又是怎么样的呢?aop还能做些什么呢?这些问题如果在实际项目中使用过,一定能回答出来,如果没有使用过,估计有点难回答,这些都是项目框架的东西,很多公司的项目这一块已经封装好了,很多人直接一直在用,但是没有去查看源码,就不知道具体的实现,实现起来其实也很简单。

接下来我们就以一个小例子来说明下如何使用aop
aop总结起来最常用的就两种方式
1、采用声明的方式来实现(基于XML) 胡子眉毛一把抓,哈哈
2、是采用注解的方式来实现(基于AspectJ)精准定位
我习惯使用注解的方式,更加灵活,使用起来也方便,接下来就以注解的方式来讲下如何使用aop来做权限校验,数据校验,操作日志记录

申明切面

我们使用springaop,首先要将定义的类交给spring管理,然后使用aspectj 定义切面,我们要额外引入
aspectj

 <dependency>      <groupId>org.aspectj</groupId>      <artifactId>aspectjweaver</artifactId>      <version>1.8.9</version></dependency>
@Component@Aspectpublic class OperationInterceptor {}

定义切点

我们采用注解的方式,那么我们首先要申明一个注解

@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Mappingpublic @interface GlobalInterceptor {    PermissionCodeEnum permissionCode();    OperModuleEnum opObject() default OperModuleEnum.NO_OBJECT;    String opDescription() default "";}

然后在我们的切面中定义切点

@Component@Aspectpublic class OperationInterceptor {@Pointcut("@annotation(com.xx.xx.GlobalInterceptor)")private void opMethods() {  }  }

定义通知类型

我们要输入还想要输出,那么我们就要将目标方法包围,所以使用around

@Component@Aspectpublic class OperationInterceptor {@Pointcut("@annotation(com.xx.xx.GlobalInterceptor)")private void opMethods() {  }    @Around("opMethods()")  public Object doMethod(ProceedingJoinPoint point) throws BusinessException {   //TODO 业务代码   return null;}}

这样一个完整的切面就定义好了

使用切面

在我们的controller中直接使用,我们拿一个登录来讲

@RequestMapping("/login")@GlobalInterceptor(permissionCode = PermissionCodeEnum.NO_PERMISSION, opObject = OperModuleEnum.OBJECT_LOGIN, opDescription = "登录账号:#{#param1}")  public ajaxResponseVO login(httpsession session, @VerifyParam(required = true) String account, @VerifyParam(required = true) String passWord,@VerifyParam(required = true) String checkCode){}

我们要传入 切面注解需要的参数
permissionCode 权限编码,我这里定义的是一个枚举,类型自己根据实际情况定义
opObject 操作模块
opDescription 操作描述,这里简单的组织下描述文字,参数的地方使用占位符,到时候根据占位符index获取具体的参数

这样我们在切面中就可以拿到这些参数

@Component@Aspectpublic class OperationInterceptor {@Pointcut("@annotation(com.xx.xx.GlobalInterceptor)")private void opMethods() {  }    @Around("opMethods()")  public Object doMethod(ProceedingJoinPoint point) throws BusinessException {   Object obj = null;    try {            SessionUserDto sessionUserDto = getSessionUser();            Object target = point.getTarget();            Object[] arguments = point.getArgs();            String method = point.getSignature().getName();            Class<?>[] parameterTypes = ((MethodSignature) point.getSignature()).getMethod().getParameterTypes();            Method m = target.getClass().getMethod(method, parameterTypes);            GlobalInterceptor interceptor = m.getAnnotation(GlobalInterceptor.class);      if (null == interceptor) {        return obj;      }            if (sessionUserDto != null) {        validatePermission(interceptor, sessionUserDto);      }            validateParams(interceptor, m, arguments);            String description = getDescription(arguments, interceptor.opDescription());            obj = point.proceed();            wirteLog(obj, description, interceptor, sessionUserDto);    } catch (BusinessException e) {      logger.error("全局拦截器异常", e);      throw e;    } catch (Exception e) {      logger.error("全局拦截器异常", e);    } catch (Throwable e) {      logger.error("全局拦截器异常", e);    }    return obj;}}

这里只贴出了部分代码,完整的代码可以到这里获取

总结

回到最开始的问题,这样我们实现了一个对原有系统侵入极小,然后又实现了操作日志的解决方案。 我们使用spring的aop非常简单,我们使用aop结合反射,可以做很多事情。aop对代码的侵入非常小,不需要动原来的代码,只需要在原有的方法上加一个注解就可以完成对系统的改造,加权限,加日志 等等一系列操作。

以上是“springAop如何实现权限管理数据校验操作日志”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: springAop如何实现权限管理数据校验操作日志

本文链接: https://www.lsjlt.com/news/267983.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springAop如何实现权限管理数据校验操作日志
    小编给大家分享一下springAop如何实现权限管理数据校验操作日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言作为一个写java的使用最多的轻量级框架莫过...
    99+
    2023-06-14
  • springAop实现权限管理数据校验操作日志的场景分析
    前言 作为一个写java的使用最多的轻量级框架莫过于spring,不管是老项目用到的springmvc,还是现在流行的springboot,都离不开spring的一些操作,我在面试的...
    99+
    2024-04-02
  • 数据源管理 | 动态权限校验,表结构和数据迁移流程
    本文源码:GitHub·点这里 || GitEE·点这里一、数据同步简介1、场景描述如果经常接触数据开发,会有这样一个场景,服务A提供一个数据源,假设称为动态数据源A,需要读取该数据源下的数据;服务B提供一个数据源,假设称为动态数据源B,...
    99+
    2023-06-02
  • MYSQL数据库管理中怎么实现权限管理
    本篇文章为大家展示了MYSQL数据库管理中怎么实现权限管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 MYSQL权限简介关于mysql的权限简单的理解就是m...
    99+
    2024-04-02
  • Django如何实现RBAC权限管理
    目录Django RBAC权限管理概述流程图总结Django RBAC权限管理 概述 RBAC(Role-Based Access Control,基于角色的访问控制),通过角色绑定...
    99+
    2022-12-20
    Django RBAC权限管理 Django RBAC RBAC权限管理
  • Java如何实现权限管理系统
    这篇文章主要介绍了Java如何实现权限管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。springboot+mybatis使用面向切面编程(AOP)实现的权限管理系统。...
    99+
    2023-06-22
  • MySQL如何实现用户管理与权限管理
    这篇文章主要为大家展示了“MySQL如何实现用户管理与权限管理”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL如何实现用户管理与权限管理”这篇文章吧。 ...
    99+
    2024-04-02
  • 麒麟操作系统中的多用户和权限管理如何实现
    麒麟操作系统是一款基于Linux内核的自主研发的操作系统,其中多用户和权限管理是麒麟操作系统的重要功能之一。下面是麒麟操作系统中多用...
    99+
    2023-10-10
    麒麟操作系统
  • Mysql如何实现用户权限管理
    小编给大家分享一下Mysql如何实现用户权限管理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. MySQL 权限介绍mysql中存在4个控制权限的表,分别为u...
    99+
    2023-06-15
  • MySQL数据库用户权限如何管理
    这篇文章主要介绍“MySQL数据库用户权限如何管理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL数据库用户权限如何管理”文章能帮助大家解决问题。1、用户管理mysql的用户信息保存在了my...
    99+
    2023-07-02
  • 如何基于SpringSecurity的@PreAuthorize实现自定义权限校验方法
    目录一、前言二、SpringSecurity的@PreAuthorize三、权限校验判断工具四、controller使用五、总结一、前言 在我们一般的web系统中必不可少的就是权限的...
    99+
    2023-05-13
    spring security自定义权限 spring security 权限 springsecurity权限配置在哪
  • Spring Boot Actuator管理日志如何实现
    这篇文章主要介绍“Spring Boot Actuator管理日志如何实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring Boot Actuato...
    99+
    2023-07-02
  • 如何在Couchbase中实现数据访问控制和权限管理
    在Couchbase中实现数据访问控制和权限管理可以通过以下几种方式: 使用RBAC(基于角色的访问控制):Couchbase支...
    99+
    2024-04-09
    Couchbase
  • Java大数据实时处理:如何更好地管理日志数据?
    随着互联网的发展,数据量呈现爆炸式增长,其中日志数据是其中一个庞大的数据源。日志数据中包含了大量的业务信息,可以用于分析业务趋势、监控系统运行状况、排查故障等。而如何更好地管理日志数据,成为了大数据处理中的一个重要问题。 本文将介绍Jav...
    99+
    2023-06-23
    大数据 实时 日志
  • MySQL基础中如何理解用户和权限管理以及日志体系
    MySQL基础中如何理解用户和权限管理以及日志体系,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、MySQL用户1、基础描述在数据库的使...
    99+
    2024-04-02
  • Teradata如何处理数据安全性和权限管理
    Teradata通过以下方式来处理数据安全性和权限管理: 数据加密:Teradata支持数据加密技术,可以对数据进行加密,保护数...
    99+
    2024-04-09
    Teradata
  • 如何使用Spring Boot+Shiro实现权限管理
    这篇文章主要介绍如何使用Spring Boot+Shiro实现权限管理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一:配置pom.xml文件<dependency><groupId>org....
    99+
    2023-06-02
  • 数据库中如何实现普通用户服务特殊管理权限
    这篇文章主要介绍数据库中如何实现普通用户服务特殊管理权限,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 普通用户服务生成AWR报告权限:grant se...
    99+
    2024-04-02
  • Springboot如何实现认证和动态权限管理
    今天小编给大家分享一下Springboot如何实现认证和动态权限管理的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。知识点补充...
    99+
    2023-06-19
  • 在AmazonAurora中如何管理数据库用户和权限
    在Amazon Aurora中,您可以通过以下步骤来管理数据库用户和权限: 创建数据库用户:首先,您可以通过使用SQL语句在Aur...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作