在spring boot中,簡單幾步,使用spring AOP實現(xiàn)一個攔截器:
創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供呼倫貝爾網(wǎng)站建設(shè)、呼倫貝爾做網(wǎng)站、呼倫貝爾網(wǎng)站設(shè)計、呼倫貝爾網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、呼倫貝爾企業(yè)網(wǎng)站模板建站服務(wù),十余年呼倫貝爾做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
1、引入依賴:
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-aop
2、創(chuàng)建攔截器類(在該類中,定義了攔截規(guī)則:攔截com.xjj.web.controller包下面的所有類中,有@RequestMapping注解的方法。):
/**
* 攔截器:記錄用戶操作日志,檢查用戶是否登錄……
* @author XuJijun
*/
@Aspect
@Component
public class ControllerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(ControllerInterceptor.class);
@Value(“${spring.profiles}”)
private String env;
/**
* 定義攔截規(guī)則:攔截com.xjj.web.controller包下面的所有類中,有@RequestMapping注解的方法。
*/
@Pointcut(“execution(* com.xjj.web.controller..*(..)) and @annotation(org.springframework.web.bind.annotation.RequestMapping)”)
public void controllerMethodPointcut(){}
/**
* 攔截器具體實現(xiàn)
* @param pjp
* @return JsonResult(被攔截方法的執(zhí)行結(jié)果,或需要登錄的錯誤提示。)
*/
@Around(“controllerMethodPointcut()”) //指定攔截器規(guī)則;也可以直接把“execution(* com.xjj………)”寫進(jìn)這里
public Object Interceptor(ProceedingJoinPoint pjp){
long beginTime = System.currentTimeMillis();
MethodSignature signature = (MethodSignature) pjp.getSignature();
Method method = signature.getMethod(); //獲取被攔截的方法
String methodName = method.getName(); //獲取被攔截的方法名
Set
/**
* 攔截器:記錄用戶操作日志,檢查用戶是否登錄……
* @author XuJijun
*/
@Aspect
@Component
public class ControllerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(ControllerInterceptor.class);
@Value("${spring.profiles}")
private String env;
/**
* 定義攔截規(guī)則:攔截com.xjj.web.controller包下面的所有類中,有@RequestMapping注解的方法。
*/
@Pointcut("execution(* com.xjj.web.controller..*(..)) and @annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void controllerMethodPointcut(){}
/**
* 攔截器具體實現(xiàn)
* @param pjp
* @return JsonResult(被攔截方法的執(zhí)行結(jié)果,或需要登錄的錯誤提示。)
*/
@Around("controllerMethodPointcut()") //指定攔截器規(guī)則;也可以直接把“execution(* com.xjj.........)”寫進(jìn)這里
public Object Interceptor(ProceedingJoinPoint pjp){
long beginTime = System.currentTimeMillis();
MethodSignature signature = (MethodSignature) pjp.getSignature();
Method method = signature.getMethod(); //獲取被攔截的方法
String methodName = method.getName(); //獲取被攔截的方法名
Set
3、測試
瀏覽器中輸入:http://localhost:8082/api/admin/login
測試結(jié)果:
2016-07-26 11:58:12,057:INFO http-nio-8082-exec-1 (ControllerInterceptor.java:58) - 請求開始,方法:login
2016-07-26 11:58:12,061:INFO http-nio-8082-exec-1 (ControllerInterceptor.java:103) - login請求結(jié)束,耗時:8ms
2016-07-26 11:58:12,057:INFO http-nio-8082-exec-1 (ControllerInterceptor.java:58) - 請求開始,方法:login
2016-07-26 11:58:12,061:INFO http-nio-8082-exec-1 (ControllerInterceptor.java:103) - login請求結(jié)束,耗時:8ms
證明攔截器已經(jīng)生效。
源代碼參考:https://github.com/xujijun/my-spring-boot
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
分享文章:詳解SpringBoot中使用AOP統(tǒng)一處理Web請求日志
轉(zhuǎn)載來源:
http://weahome.cn/article/jhegjo.html