springMvc的Aop解析并修改参数

这篇具有很好参考价值的文章主要介绍了springMvc的Aop解析并修改参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        在前后端接口开发过程中,我们常常需要对某些字段进行加解密。以下是使用Aop对接口的get参数做修改的过程:

自定义注解

AesMethod:只能用于方法

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AesMethod {
}

AesParam:只用用户属性

@Retention(RetentionPolicy.RUNTIME)
@Target(value = ElementType.PARAMETER)
public @interface AesParam {
}

切面

这里必须使用环绕 @Around,这样才能使用转换后参数文章来源地址https://www.toymoban.com/news/detail-806877.html

@Aspect
@Component
public class AesParamAspect {

   @Around(value = "com.zsc.test.aop.AesParamAspect.aesPointCut()")
    public Object dealAesParam(ProceedingJoinPoint joinPoint) throws Throwable {

        Object[] args = joinPoint.getArgs();
        // 方法签名
        Signature signature = joinPoint.getSignature();
        // 获取代理对象的method方法
        Method proxyMethod = ((MethodSignature)signature).getMethod();
        Annotation[] methodAnnotations = proxyMethod.getDeclaredAnnotations();
        
        //是否是需要解密的方法
        boolean isContainTargetAnnotation = false;
        for(Annotation annotation : methodAnnotations){
            if(annotation.annotationType().getSimpleName().equals("AesParamMethod")){
                isContainTargetAnnotation = true;
            }
        }
        
        if(isContainTargetAnnotation) {
            // 获取目标对象上的method方法(防止有protected或private修饰的方法反射获取失败)
            Method targetMethod = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), proxyMethod.getParameterTypes());

            int num = -1;
            // 取出对应的注解 二维数组,第一维是方法的参数列表,第二维是参数上的注解列表
            Annotation[][] parameterAnnotations = targetMethod.getParameterAnnotations();
            for (Annotation[] annotations : parameterAnnotations) {
                // 获取参数索引位置
                num = num + 1;
                for (Annotation annotation : annotations) {
                    if (annotation.annotationType().getSimpleName().equals("AesParam")) {
                        // 需要做数据解密
                        if (ObjectUtil.isNotEmpty(args[num])) {
                            try {
                                //解密后的数据
                                args[num] += AesUtil.deal(args[num]);
                            } catch (Throwable e) {
                                e.printStackTrace();
                            }
                        }
                    }

                }
            }
        }
        return joinPoint.proceed(args);
    }

    /**
     * 切点
     */
    @Pointcut("execution(* com.zsc.test.controller..*.*(..)) && @annotation(com.zsc.test.annotations.AesMethod)")
    public void aesPointCut(){

    }

测试类

@RestController
@RequestMapping("test")
public class TestController {

    @AesMethod
    @GetMapping("/get")
    public String test(@AesParam @RequestParam("name") String name){
        LOGGER.info("name: {}", name);
        return name;
    }
}

到了这里,关于springMvc的Aop解析并修改参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java 初级】Spring核心之面向切面编程(AOP)

    tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐: 体系化学习Java(Java面试专题) AOP(面向切面编程)是一种编程范式,用于将横切关注点(如日志记录、性能统计等

    2024年02月04日
    浏览(38)
  • 【Spring教程28】Spring框架实战:从零开始学习SpringMVC 之 请求与请求参数详解

    欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《PostMan工具的安装与使用技巧》 前面我们已经完成了入门案例相关的知识学

    2024年02月03日
    浏览(62)
  • [Spring5.3.2] Servlet[springmvc]的Servlet.init()引发异常, 解析类文件失败

    问题表现: 图中提到的问题: 例外情况 javax.servlet.ServletException: Servlet[springmvc]的Servlet.init()引发异常 根本原因 org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:apache-tomcat-9.0.69webappsch2_2WEB-INFclassescontrollerIndexController.class]; nested excep

    2024年02月02日
    浏览(26)
  • 【SpringMVC】自定义注解与AOP结合使用

    目录 一、SpringMVC之自定义注解 1.1 Java注解简介 1.2 为什么要用注解 1.3 注解的分类 ⭐ 1.3.1 JDK基本注解 1.3.2 JDK元注解  1.3.3 自定义注解  1.4 自定义注解三种使用案例 1.4.1 案例一(获取类与方法上的注解值) 1.4.2 案例二(获取类属性上的注解属性值) 1.4.3 案例三(获取参数

    2024年02月07日
    浏览(59)
  • Spring AOP:面向切面编程

    在软件开发中,我们经常会遇到一些横切关注点(cross-cutting concerns),如日志记录、事务管理和安全性等。这些关注点不属于特定的模块或类,而是横跨整个应用程序。传统的面向对象编程方法往往会将这些关注点与核心业务逻辑混杂在一起,导致代码的可读性和可维护性下

    2024年02月09日
    浏览(32)
  • Spring面向切面编程(AOP)

    AOP(Aspect Oriented Programming),即面向切面编程,利用一种称为\\\"横切\\\"的技术,剖开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为\\\"Aspect\\\",即切面。所谓\\\"切面\\\",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装

    2024年02月07日
    浏览(33)
  • spring之面向切面:AOP(2)

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月04日
    浏览(33)
  • Spring-aop面向切面

    1、理解必要的专业术语  先看看上面图,这是我的个人理解。(画的丑,主打真实)         1)Advice,通知/增强:类方法中提出来的共性功能(大白话就是提出来的重复代码)         2)Pointcut,切入点/切点:通知返回的方法         3)连接点:方法         4)织入:

    2023年04月15日
    浏览(72)
  • 注解 + spring aop切面+ SpringEl

    2024年02月09日
    浏览(33)
  • Spring-AOP(面向切面)

    功能接口 实现类 在含有日志输出的实现类中可以了解到:与核心业务功能没有关系的日志输出加杂在模块中,对核心业务功能有干扰。 思路:解耦 , 将附加功能从业务功能模块中抽取出来 概念 二十三种设计模式中的一种,属于结构型模式,它的作用就是通过提供一个代理

    2024年02月16日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包