一 准备工作

1.1 添加依赖

通过spring boot创建好工程后,添加如下依赖,不然工程中无法使用切面的注解,就无法对制定的方法进行拦截

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
 <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>

 

1.2 工程目录结构

其中 

MonitorRequest 自定义注解
RequestAspect 切面类
BookController 测试接口请求

 spring boot通过自定义注解和AOP拦截指定的请求 随笔

 

二 自定义注解

package com.tinno.word.advice;

import java.lang.annotation.*;
import org.springframework.web.bind.annotation.Mapping;

/**
 * Created by xingle on 2019/5/15
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Mapping
@Documented
public @interface MonitorRequest {


}

三 切面类

 1 package com.tinno.word.aspect;
 2 
 3 import com.tinno.word.utils.CodeUtils;
 4 import javax.servlet.http.HttpServletRequest;
 5 import org.aspectj.lang.ProceedingJoinPoint;
 6 import org.aspectj.lang.annotation.Around;
 7 import org.aspectj.lang.annotation.Aspect;
 8 import org.slf4j.Logger;
 9 import org.slf4j.LoggerFactory;
10 import org.springframework.stereotype.Component;
11 import org.springframework.web.context.request.RequestContextHolder;
12 import org.springframework.web.context.request.ServletRequestAttributes;
13 
14 /**
15  * Created by xingle on 2019/5/15
16  * 此类为一个切面类,主要作用就是对接口的请求进行拦截
17  * 拦截的方式,只需要在指定接口方法上面加上@MonitorRequest注解即可
18  */
19 
20 @Aspect
21 @Component
22 public class RequestAspect {
23 
24   private Logger logger = LoggerFactory.getLogger(this.getClass());
25 
26   /**
27    * 环绕通知:
28    * 环绕通知非常强大,可以决定目标方法是否执行,什么时候执行,执行时是否需要替换方法参数,执行完毕是否需要替换返回值。
29    * 环绕通知第一个参数必须是org.aspectj.lang.ProceedingJoinPoint类型
30    */
31   @Around(value = "@annotation(com.tinno.word.advice.MonitorRequest)")
32   public Object doBefore(ProceedingJoinPoint joinPoint) {
33 
34     //获取到请求的属性
35     ServletRequestAttributes attributes =
36         (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
37     //获取到请求对象
38     HttpServletRequest request = attributes.getRequest();
39 
40     //获取请求的方法,是Get还是Post请求
41     logger.info("method=" + request.getMethod());
42 
43     Object[] args = joinPoint.getArgs();
44     String de_input = "";
45     try {
46       logger.debug("解密前:" + args[0].toString());
47       //这里具体解密方法不再列出
48       de_input = CodeUtils.decrypt(args[0].toString());
49       logger.debug("解密后:" + de_input);
50     } catch (Exception e) {
51       e.printStackTrace();
52     }
53     args[0] = de_input;
54 
55     Object returnValue = null;
56     try {
57       //执行方法,以新的参数(如果不带args就是用原先的参数)
58       returnValue = joinPoint.proceed(args);
59       logger.debug("returnValue:" +returnValue.toString());
60     } catch (Throwable throwable) {
61       throwable.printStackTrace();
62     }
63 
64     //执行完毕也可以替换目标方法返回值,这里没有替换
65     return returnValue;
66 
67   }
68 
69 
70 }

 

四 Controller类

 

 1   @MonitorRequest
 2   @RequestMapping(value = "/getBookVersionLs", method = {RequestMethod.GET,RequestMethod.POST},produces={"text/html;charset=UTF-8;","application/json;"})
 3   public String getBookVersionLs(@RequestBody String json){
 4     logger.info("Controller-getBookVersionLs 版本选择书本列表,请求参数:"+json);
 5     JSONObject jsonObject = JSONObject.parseObject(json);
 6     String userId = jsonObject.getString("udid");
 7     String device_id = jsonObject.getString("device_id");
 8     Map<String, Object> data = JsonUtil.jsonText2JsonMap(jsonObject.getString("data"));
 9 
10     String rand = data.get("rand").toString();
11     String version =  data.get("version").toString();
12 
13     if (isEmpty(userId) || isEmpty(device_id)){
14       ResultBody result = ResultBody.toFailure(ErrorInfoEnum.PARAMS_NO_COMPLETE.getStatus(),ErrorInfoEnum.PARAMS_NO_COMPLETE.getDest());
15       return new Gson().toJson(result);
16     }
17     List<AllBookVersion> allList = bookService.getAllBookVersionLs();
18     AllBookVersion first = allList.get(0);
19     if (isEmpty(rand) && isEmpty(version)){
20       rand = first.getRand();
21       version = first.getVersionLs().get(0);
22     }
23     List<BookVersion> bookList = bookService.getBookVersionLs(device_id,rand,version);
24 
25     JSONObject obj = new JSONObject();
26     obj.put("bookList",bookList);
27     obj.put("allList",allList);
28     ResultBody resultBody = ResultBody.toSussess(obj,"");
29     return new Gson().toJson(resultBody);
30   }

 

四 结果

请求参数:

D1D329BF7D4C02CB97C29CB03DF243D79A280D3DD1C6B0EC89B353394409DE0C950A48E2809E6539DE3A641CBA6A89957296D9E7E1DD4906505C5ADFAF89C0AA0B585B1338A57F1CAD8ABE8538E74B75C7947C0B593E3C6DB66DB2CDE07305B671E4405FFA5701C44590D3DE4973174E7D8FB983E82768A0DE086534494CAA49

 

返回结果:

{
    "status":true,
    "msg":"成功",
    "result":{
        "allList":[
            {
                "rand":"小学",
                "versionLs":[
                    "人教版(PEP)"
                ]
            }
        ],
        "bookList":[
            {
                "rand":"小学",
                "version":"人教版(PEP)",
                "bookLs":[
                    {
                        "id":1,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"三年级",
                        "volume":"上册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_3_1/cover.jpg",
                        "updateTime":"2019-02-15 19:12:49.0",
                        "learnedWordNum":0,
                        "totalNum":64,
                        "learnStatus":"1",
                        "isMyBook":"1",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4",
                            "Unit 5",
                            "Unit 6"
                        ]
                    },
                    {
                        "id":2,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"三年级",
                        "volume":"下册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_3_2/cover.jpg",
                        "updateTime":"2019-02-15 19:12:51.0",
                        "learnedWordNum":0,
                        "totalNum":71,
                        "learnStatus":"1",
                        "isMyBook":"1",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4",
                            "Unit 5",
                            "Unit 6"
                        ]
                    },
                    {
                        "id":3,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"四年级",
                        "volume":"上册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_4_1/cover.jpg",
                        "updateTime":"2019-02-15 19:12:53.0",
                        "learnedWordNum":0,
                        "totalNum":84,
                        "learnStatus":"1",
                        "isMyBook":"1",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4",
                            "Unit 5",
                            "Unit 6"
                        ]
                    },
                    {
                        "id":4,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"四年级",
                        "volume":"下册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_4_2/cover.jpg",
                        "updateTime":"2019-02-15 19:12:56.0",
                        "learnedWordNum":0,
                        "totalNum":104,
                        "learnStatus":"1",
                        "isMyBook":"0",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4",
                            "Unit 5",
                            "Unit 6"
                        ]
                    },
                    {
                        "id":5,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"五年级",
                        "volume":"上册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_5_1/cover.jpg",
                        "updateTime":"2019-02-15 19:12:59.0",
                        "learnedWordNum":0,
                        "totalNum":129,
                        "learnStatus":"1",
                        "isMyBook":"1",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4",
                            "Unit 5",
                            "Unit 6"
                        ]
                    },
                    {
                        "id":6,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"五年级",
                        "volume":"下册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_5_2/cover.jpg",
                        "updateTime":"2019-02-18 17:21:42.0",
                        "learnedWordNum":0,
                        "totalNum":156,
                        "learnStatus":"1",
                        "isMyBook":"0",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4",
                            "Unit 5",
                            "Unit 6"
                        ]
                    },
                    {
                        "id":7,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"六年级",
                        "volume":"上册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_6_1/cover.jpg",
                        "updateTime":"2019-02-18 17:33:50.0",
                        "learnedWordNum":0,
                        "totalNum":147,
                        "learnStatus":"1",
                        "isMyBook":"1",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4",
                            "Unit 5",
                            "Unit 6"
                        ]
                    },
                    {
                        "id":8,
                        "rand":"小学",
                        "version":"人教版(PEP)",
                        "grand":"六年级",
                        "volume":"下册",
                        "publish":"人民教育出版社",
                        "image":"http://study-voice.oss-cn-hangzhou.aliyuncs.com/pictureBook/PEP/Grade_6_2/cover.jpg",
                        "updateTime":"2019-02-18 17:33:57.0",
                        "learnedWordNum":0,
                        "totalNum":91,
                        "learnStatus":"1",
                        "isMyBook":"0",
                        "unitList":[
                            "Unit 1",
                            "Unit 2",
                            "Unit 3",
                            "Unit 4"
                        ]
                    }
                ]
            }
        ]
    }
}

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄