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自定义注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java链表数据结构LinkedList插入删除元素时间复杂度面试精讲

    java链表数据结构LinkedList插入删除元素时间复杂度面试精讲

    这篇文章主要为大家介绍了java LinkedList插入和删除元素的时间复杂度面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • SpringBoot一个接口多个实现类的调用方式总结

    SpringBoot一个接口多个实现类的调用方式总结

    这篇文章主要介绍了SpringBoot一个接口多个实现类的调用方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • 用java实现跳动的小球示例代码

    用java实现跳动的小球示例代码

    这篇文章主要介绍了用java实现跳动的小球,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • SpringMVC工作原理实例详解

    SpringMVC工作原理实例详解

    这篇文章主要介绍了SpringMVC工作原理实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • JAVA SPI机制详解使用方法

    JAVA SPI机制详解使用方法

    Java定义了一套JDBC的接口,但并未提供具体实现类,而是在不同云厂商提供的数据库实现包。这篇文章给大家介绍Java的SPI机制,感兴趣的朋友一起看看吧
    2022-07-07
  • Java Swing组件JFileChooser用法实例分析

    Java Swing组件JFileChooser用法实例分析

    这篇文章主要介绍了Java Swing组件JFileChooser用法,结合实例形式分析了java Swing组件JFileChooser文件选择器的功能、使用方法及相关注意事项,需要的朋友可以参考下
    2017-11-11
  • SpringMVC异步处理操作(Callable和DeferredResult)

    SpringMVC异步处理操作(Callable和DeferredResult)

    这篇文章主要介绍了SpringMVC异步处理操作(Callable和DeferredResult),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java实现简单的日历界面

    Java实现简单的日历界面

    这篇文章主要为大家详细介绍了Java实现简单的日历界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 将Springboot项目升级成Springcloud项目的图文教程

    将Springboot项目升级成Springcloud项目的图文教程

    本文主要介绍了将Springboot项目升级成Springcloud项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • Java String类的常用方法汇总

    Java String类的常用方法汇总

    这篇文章主要为大家详细汇总了Java String类的常用方法,感兴趣的小伙伴们可以参考一下
    2016-07-07

最新评论