一.pom添加依赖
<!--AOP-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>RELEASE</version>
</dependency>
二.创建切面类
package com.example.demo.aspect;
import com.example.demo.exception.MyException;
import com.example.demo.utils.ResultUtil;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.Arrays;
import java.util.logging.Logger;
/* *
* Created by Ay on 2018/9/20
*/
@Aspect
@Component
public class ControllerAspect {
@Pointcut("execution(public * com.example.demo.controller.TestController.errorTest(..))")
public void check() {
}
@Before(value = "check()")
public void checkBefore(JoinPoint joinPoint)
{
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
System.out.println("===============请求内容===============");
System.out.println("请求地址:"+request.getRequestURL().toString());
System.out.println("请求方式:"+request.getMethod());
System.out.println("请求类方法:"+joinPoint.getSignature());
System.out.println("请求类方法参数:"+ Arrays.toString(joinPoint.getArgs()));
//检查权限
HttpSession session = request.getSession();
if(session.getAttribute("user")==null) {
throw new MyException(-1,"无权限访问");
}
}
@After(value = "check()")
public void checkAfter() {
System.out.println("aop after");
}
}
@Aspect声明这是一个切面类
@Pointcut切点指明要切入的方法,check是签名
JoinPoint可以获得要请求的方法和请求的参数
三.测试代码
@RequestMapping(value = "error/{id}")
public Object errorTest(@PathVariable("id") Integer id) {
if(id == 0){
throw new MyException(-1,"除0");
}
int result = 10 / id;
return ResultUtil.success(result);
}
@RequestMapping(value = "login")
@ResponseBody
public Object loginTest(@RequestParam("username") String username, @RequestParam("password") String password,
HttpSession session){
if("admin".equals(username) && "admin".equals(password)){
session.setAttribute("user",username);
return ResultUtil.success();
}
return ResultUtil.error(-1,"登录失败");
}
打印内容
AOP通常可用于权限检查及访问日志