spring boot如何通过自定义注解和AOP拦截指定的请求

 更新时间:2024年06月12日 09:36:15   作者:阿顾同学  
这篇文章主要介绍了spring boot通过自定义注解和AOP拦截指定的请求,本文主要通过切面类和自定注解的方式,拦截指定的接口(代码中已经作了详细的说明),需要的朋友可以参考下

本文主要通过切面类和自定注解的方式,拦截指定的接口(代码中已经作了详细的说明)

一 准备工作

1.1 添加依赖

通过spring boot创建好工程后,添加如下依赖,不然工程中无法使用切面的注解,就无法对制定的方法进行拦截

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

1.2 demo工程 

二 自定义注解

import java.lang.annotation.*;
/**
 * @Target 此注解的作用目标,括号里METHOD的意思说明此注解只能加在方法上面
 * @Retention 注解的保留位置,括号里RUNTIME的意思说明注解可以存在于运行时,可以用于反射
 * @Documented 说明该注解将包含在javadoc中
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MonitorRequest {
}

三 切面类

/**
 * 此类为一个切面类,主要作用就是对接口的请求进行拦截
 * 拦截的方式,只需要在指定接口方法上面加上@MonitorRequest注解即可
 *
 * @author guguoyu
 * @version 1.0
 * @since 2018/10/28
 */
@Aspect
@Component
public class RequestAspect {
    //使用org.slf4j.Logger,这是spring实现日志的方法
    private final static Logger logger = LoggerFactory.getLogger(RequestAspect.class);
    /**
     * 表示在执行被@MonitorRequest注解修饰的方法之前 会执行doBefore()方法
     *
     * @param joinPoint 连接点,就是被拦截点
     */
    @Before(value = "@annotation(com.example.demo.annotation.MonitorRequest)")
    public void doBefore(JoinPoint joinPoint) {
        //获取到请求的属性
        ServletRequestAttributes attributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        //获取到请求对象
        HttpServletRequest request = attributes.getRequest();
        //URL:根据请求对象拿到访问的地址
        logger.info("url=" + request.getRequestURL());
        //获取请求的方法,是Get还是Post请求
        logger.info("method=" + request.getMethod());
        //ip:获取到访问
        logger.info("ip=" + request.getRemoteAddr());
        //获取被拦截的类名和方法名
        logger.info("class=" + joinPoint.getSignature().getDeclaringTypeName() +
                "and method name=" + joinPoint.getSignature().getName());
        //参数
        logger.info("参数=" + joinPoint.getArgs().toString());
    }
}

四 Controller类

@RestController
public class TestController {
    /**
     * 添加了自定义注解@MonitorRequest
     * @return
     */
    @MonitorRequest
    @RequestMapping(value = "/test")
    public String test(){
        return "method be added @MonitorRequest";
    }
    /**
     * 没有添加自定义注解
     * @return
     */
    @RequestMapping(value = "test2")
    public String test2(){
        return "method not be added @MonitorRequest";
    }
}

五 测试结果 

六 源码地址

https://github.com/guguoyu/demo-monitor

到此这篇关于spring boot通过自定义注解和AOP拦截指定的请求的文章就介绍到这了,更多相关spring boot自定义注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Spring Boot和JPA创建GraphQL API

    利用Spring Boot和JPA创建GraphQL API

    这篇文章主要介绍了利用Spring Boot和JPA创建GraphQL API,GraphQL既是API查询语言,也是使用当前数据执行这些查询的运行时,下文更多相关内容介绍需要的小伙伴可以参考一下
    2022-04-04
  • java rocketmq--消息的产生(普通消息)

    java rocketmq--消息的产生(普通消息)

    这篇文章主要介绍了java rocketmq--消息的产生(普通消息),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • java 解决Eclipse挂掉问题的方法

    java 解决Eclipse挂掉问题的方法

    本篇文章是对在java中解决Eclipse挂掉问题的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • java将excel转为pdf的方法步骤

    java将excel转为pdf的方法步骤

    之前工作需要,查了挺多种Excel转PDF的方法,下面这篇文章主要给大家介绍了关于java将excel转为pdf的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • Java8中对于LocalDateTime的序列化和反序列化问题

    Java8中对于LocalDateTime的序列化和反序列化问题

    这篇文章主要介绍了Java8中对于LocalDateTime的序列化和反序列化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java使用二分法进行查找和排序的示例

    Java使用二分法进行查找和排序的示例

    这篇文章主要介绍了Java使用二分法进行查找和排序的示例,二分插入排序和二分查找是基础的算法,需要的朋友可以参考下
    2016-04-04
  • java9迁移注意问题总结

    java9迁移注意问题总结

    本篇文章给大家详细整理了java9迁移注意的问题,希望我们整理的内容能够帮助到大家。
    2018-02-02
  • Java仿12306图片验证码

    Java仿12306图片验证码

    这篇文章主要为大家详细介绍了Java仿12306的图片验证码的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Java BigDecimal类用法详解

    Java BigDecimal类用法详解

    BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负scale 次幂。
    2016-06-06
  • Java编程中的性能优化如何实现

    Java编程中的性能优化如何实现

    这篇文章主要介绍了Java编程中的性能优化如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论