java+aop+取返回值_controller层获取aop方法返回的值

问题描述:

做的内容大致是阻止用户恶意不断请求,限制单位时间内访问次数

然后做了一个aop,但是我没法在controller层中获取aop方法的返回值,如下代码:

@Pointcut("execution(public * com.mzd.redis_springboot_mybatis_mysql.controller.*.*(..))")

public void WebPointCut() {

}

@Before("WebPointCut() && @annotation(times)")

public boolean ifovertimes(final JoinPoint joinPoint, RequestTimes times) {

try {

Object[] objects = joinPoint.getArgs();

HttpServletRequest request = null;

for (int i = 0; i < objects.length; i++) {

if (objects[i] instanceof HttpServletRequest) {

request = (HttpServletRequest) objects[i];

break;

}

}

if (request == null) {

return true;

}

String ip = request.getRemoteAddr();

String url = request.getRequestURL().toString();

String key = "ifovertimes".concat(url).concat(ip);

long count = redisTemplate.opsForValue().increment(key, 1);

//如果是第一次,则设置过期时间

if (count == 1) {

redisTemplate.expire(key, times.time(), TimeUnit.MILLISECONDS);

}

if (count <= times.count()) {

return true;

}

} catch (Exception e) {

e.printStackTrace();

}

return false;

}

然后我要controller层中怎么获取这个boolean值,到底是到访问次数上限了还是未到访问次数上限

你可能感兴趣的:(java+aop+取返回值)