spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求
本文主要通過(guò)切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細(xì)的說(shuō)明)
一 準(zhǔn)備工作
1.1 添加依賴
通過(guò)spring boot創(chuàng)建好工程后,添加如下依賴,不然工程中無(wú)法使用切面的注解,就無(wú)法對(duì)制定的方法進(jìn)行攔截
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>1.2 demo工程

二 自定義注解
import java.lang.annotation.*;
/**
* @Target 此注解的作用目標(biāo),括號(hào)里METHOD的意思說(shuō)明此注解只能加在方法上面
* @Retention 注解的保留位置,括號(hào)里RUNTIME的意思說(shuō)明注解可以存在于運(yùn)行時(shí),可以用于反射
* @Documented 說(shuō)明該注解將包含在javadoc中
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MonitorRequest {
}三 切面類
/**
* 此類為一個(gè)切面類,主要作用就是對(duì)接口的請(qǐng)求進(jìn)行攔截
* 攔截的方式,只需要在指定接口方法上面加上@MonitorRequest注解即可
*
* @author guguoyu
* @version 1.0
* @since 2018/10/28
*/
@Aspect
@Component
public class RequestAspect {
//使用org.slf4j.Logger,這是spring實(shí)現(xiàn)日志的方法
private final static Logger logger = LoggerFactory.getLogger(RequestAspect.class);
/**
* 表示在執(zhí)行被@MonitorRequest注解修飾的方法之前 會(huì)執(zhí)行doBefore()方法
*
* @param joinPoint 連接點(diǎn),就是被攔截點(diǎn)
*/
@Before(value = "@annotation(com.example.demo.annotation.MonitorRequest)")
public void doBefore(JoinPoint joinPoint) {
//獲取到請(qǐng)求的屬性
ServletRequestAttributes attributes =
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//獲取到請(qǐng)求對(duì)象
HttpServletRequest request = attributes.getRequest();
//URL:根據(jù)請(qǐng)求對(duì)象拿到訪問(wèn)的地址
logger.info("url=" + request.getRequestURL());
//獲取請(qǐng)求的方法,是Get還是Post請(qǐng)求
logger.info("method=" + request.getMethod());
//ip:獲取到訪問(wèn)
logger.info("ip=" + request.getRemoteAddr());
//獲取被攔截的類名和方法名
logger.info("class=" + joinPoint.getSignature().getDeclaringTypeName() +
"and method name=" + joinPoint.getSignature().getName());
//參數(shù)
logger.info("參數(shù)=" + joinPoint.getArgs().toString());
}
}四 Controller類
@RestController
public class TestController {
/**
* 添加了自定義注解@MonitorRequest
* @return
*/
@MonitorRequest
@RequestMapping(value = "/test")
public String test(){
return "method be added @MonitorRequest";
}
/**
* 沒(méi)有添加自定義注解
* @return
*/
@RequestMapping(value = "test2")
public String test2(){
return "method not be added @MonitorRequest";
}
}五 測(cè)試結(jié)果

六 源碼地址
https://github.com/guguoyu/demo-monitor
到此這篇關(guān)于spring boot通過(guò)自定義注解和AOP攔截指定的請(qǐng)求的文章就介紹到這了,更多相關(guān)spring boot自定義注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot整合Dubbo+Nacos實(shí)現(xiàn)RPC調(diào)用的示例代碼
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,越來(lái)越多的企業(yè)和開發(fā)者開始關(guān)注微服務(wù)架構(gòu),Nacos是阿里巴巴開源的一個(gè)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái),本文講解如何將Spring Boot與Dubbo和Nacos整合,實(shí)現(xiàn)RPC調(diào)用,需要的朋友可以參考下2024-02-02
Spring Cache監(jiān)控配置與使用規(guī)范的建議
這篇文章主要介紹了Spring Cache監(jiān)控配置與使用規(guī)范的建議,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
java Hibernate多對(duì)多映射詳解及實(shí)例代碼
這篇文章主要介紹了java Hibernate多對(duì)多映射詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01
java批量導(dǎo)入導(dǎo)出文件的實(shí)例分享(兼容xls,xlsx)
這篇文章主要給大家介紹了利用java批量導(dǎo)入導(dǎo)出文件的相關(guān)資料,文中給出了詳細(xì)的實(shí)例代碼,并且兼容xls,xlsx,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,下面跟著小編一起來(lái)看看詳細(xì)的介紹吧。2017-06-06
Mybatis generator如何自動(dòng)生成代碼
這篇文章主要介紹了Mybatis generator如何自動(dòng)生成代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12

