参考文章:https://blog.youkuaiyun.com/qq_17635843/article/details/78990881
- 自定义一个拦截器集成HandlerInterceptorAdapter里面的preHandle方法
@Component
public class AccessInterceptor extends HandlerInterceptorAdapter {
@Autowired
IpUtils ipUtils;
@Autowired
Detail detail;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod hm = (HandlerMethod) handler;
//请求的方法是否带有accesslimit注解
AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);
if (accessLimit == null) {
return false;
}
int seconds = accessLimit.seconds();
int maxCound = accessLimit.maxCount();
boolean needLogin = accessLimit.needLogin();
String key = request.getRequestURI();
//判断需不需要登录才能进行的操作
if(needLogin) {
//如果没有登录,不让访问
// if(user == null) {
// //render(response, CodeMsg.SESSION_ERROR);
// return false;
// }
}else {
//do nothing
}
if(ipUtils.redisIP(request)){
System.out.println("一切正常!!!");
return true;
}else{
detail.setState(403);
detail.setMessage("拒绝访问-访问次数超过");
reder(response, request, detail);
return false;
}
// String loginStr = (String) request.getSession().getAttribute("login");
// HttpSession session = request.getSession();
// Integer count = (Integer) session.getAttribute("count");
// if (count == null) {
// session.setAttribute("count", 1);
// } else if (count < maxCound) {
// count++;
// session.setAttribute("count", count);
// } else {
// reder(response, request, "超过了数据");
// return false;
// }
}
return true;
}
private void reder(HttpServletResponse response, HttpServletRequest request, Detail detail) throws IOException {
response.setContentType("application/json;charset=UTF-8"