spring?boot如何通過自定義注解和AOP攔截指定的請求
本文主要通過切面類和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細的說明)
一 準備工作
1.1 添加依賴
通過spring boot創(chuàng)建好工程后,添加如下依賴,不然工程中無法使用切面的注解,就無法對制定的方法進行攔截
<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實現(xiàn)日志的方法 private final static Logger logger = LoggerFactory.getLogger(RequestAspect.class); /** * 表示在執(zhí)行被@MonitorRequest注解修飾的方法之前 會執(zhí)行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:根據(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查詢語言,也是使用當前數(shù)據(jù)執(zhí)行這些查詢的運行時,下文更多相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下2022-04-04java rocketmq--消息的產(chǎn)生(普通消息)
這篇文章主要介紹了java rocketmq--消息的產(chǎn)生(普通消息),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下2019-06-06Java8中對于LocalDateTime的序列化和反序列化問題
這篇文章主要介紹了Java8中對于LocalDateTime的序列化和反序列化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06