spring?boot如何通過自定義注解和AOP攔截指定的請求
本文主要通過切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細(xì)的說明)
一 準(zhǔn)備工作
1.1 添加依賴
通過spring boot創(chuàng)建好工程后,添加如下依賴,不然工程中無法使用切面的注解,就無法對制定的方法進(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),括號里METHOD的意思說明此注解只能加在方法上面
* @Retention 注解的保留位置,括號里RUNTIME的意思說明注解可以存在于運(yùn)行時,可以用于反射
* @Documented 說明該注解將包含在javadoc中
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MonitorRequest {
}三 切面類
/**
* 此類為一個切面類,主要作用就是對接口的請求進(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注解修飾的方法之前 會執(zhí)行doBefore()方法
*
* @param joinPoint 連接點(diǎn),就是被攔截點(diǎn)
*/
@Before(value = "@annotation(com.example.demo.annotation.MonitorRequest)")
public void doBefore(JoinPoint joinPoint) {
//獲取到請求的屬性
ServletRequestAttributes attributes =
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//獲取到請求對象
HttpServletRequest request = attributes.getRequest();
//URL:根據(jù)請求對象拿到訪問的地址
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());
//參數(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";
}
/**
* 沒有添加自定義注解
* @return
*/
@RequestMapping(value = "test2")
public String test2(){
return "method not be added @MonitorRequest";
}
}五 測試結(jié)果

六 源碼地址
https://github.com/guguoyu/demo-monitor
到此這篇關(guān)于spring boot通過自定義注解和AOP攔截指定的請求的文章就介紹到這了,更多相關(guān)spring boot自定義注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Spring?Boot和JPA創(chuàng)建GraphQL?API
這篇文章主要介紹了利用Spring?Boot和JPA創(chuàng)建GraphQL?API,GraphQL既是API查詢語言,也是使用當(dāng)前數(shù)據(jù)執(zhí)行這些查詢的運(yùn)行時,下文更多相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下2022-04-04
java rocketmq--消息的產(chǎn)生(普通消息)
這篇文章主要介紹了java rocketmq--消息的產(chǎn)生(普通消息),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06
Java8中對于LocalDateTime的序列化和反序列化問題
這篇文章主要介紹了Java8中對于LocalDateTime的序列化和反序列化問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Java編程中的性能優(yōu)化如何實(shí)現(xiàn)
這篇文章主要介紹了Java編程中的性能優(yōu)化如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10

