如何写一个自定义拦截器
在一个javaWeb项目中,配置拦截器是必不可少的,有些操作只有在权限用户登录下才可以进行,那么一个简单的拦截器该如何写呢?首先自定义一个拦截器实现HandlerIntercepto接口,然后获取登录信息,具体是怎样实现的请看下面的代码实现:
/** * @Description <自定义拦截器/Custom interceptor> * @Author * @Date * @Param * @since 1.0.0 **/ public class Interceptor implements HandlerInterceptor { //↓代码正文↓ /** * @return boolean * @Description <preHandle为请求之前调用,Controller请求之前进行调用,false结束请求,true继续请求> * @Author * @Date * @Param [request, response, handler] * @since 1.0.0 **/ // @Override // @ResponseBody public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception { boolean flag = true; String message = GlobalConstant.Wrap; message += "————— 调用接口前 —————" + GlobalConstant.Wrap; //获取访问信息 String url = request.getServletPath(); String ip = normalUtil.getRealIp(request); String urlIp="访问接口:" + url + " 访问IP:" + ip; message += urlIp+GlobalConstant.Wrap; //非公共接口访问 if (!publicInterface.isPublicInterface(url)) { //获取登录标签 String login = request.getParameter("userId"); if (login!= null) { //判断Redis缓存中是否存在该login值 if(redisUtil.isKeyExists(login)) { //获取该login值对应的身份信息 HashMap<String,Object> userInfo=userService.getRedisInformation(login); request.setAttribute("userInfo",userInfo); //成功访问接口则刷新一次登录缓存信息 userService.putLoginInfo(); logger.info("访问成功!该访问用户为:"+User.getLoginAccount()+" 名字:"+User.getUserName()); } else { //Redis中MD5值超时被刷新 logger.info(urlIp+" login:"+login+" "+CoMessage.访问失败登录超时.getMessage()); normalUtil.returnResponseCodeMessage(response,CoMessage.访问失败登录超时.getCode(),logger); flag = false; return flag; } } else { logger.info(urlIp+" "+CoMessage.访问失败尚未登录.getMessage()); normalUtil.returnResponseMessage(response,Message.访问失败尚未登录.getCode(),logger); flag = false; return flag; } } if (flag) message += "—————开始访问接口—————"; else message += "—————访问接口失败—————"; //打印访问信息 logger.info(message); return flag; } /** * @return void * @Description <postHandle为请求处理之后调用,Controller请求处理之后,但是在视图渲染之前调用> * @Author * @Date * @Param [request, response, handler, modelAndView] * @since 1.0.0 **/ @Override public void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView) throws Exception { String message = GlobalConstant.Wrap + "————— 调用接口中 —————"; logger.info(message); } /** * @return void * @Description <整个请求结束之后被调用,也就是在Dispatcher Servlet渲染了对应的视图之后> * @Author * @Date * @Param [request, response, handler, ex] * @since 1.0.0 **/ @Override public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex) throws Exception { String message = GlobalConstant.Wrap + "—————调用接口结束—————"; message += GlobalConstant.Wrap; logger.info(message); } //↓单元测试代码↓ }
浙公网安备 33010602011771号