@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { return super.preHandle(request, response, handler); } if (!ifLogin(request)) { HandlerMethod method = (HandlerMethod)handler; PermessionLimit permission = method.getMethodAnnotation(PermessionLimit.class); if (permission == null || permission.limit()) { response.sendRedirect(request.getContextPath() + "/toLogin"); //request.getRequestDispatcher("/toLogin").forward(request, response); return false; } } return super.preHandle(request, response, handler); }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // cookie if (modelAndView!=null && ArrayUtils.isNotEmpty(request.getCookies())) { HashMap<String, Cookie> cookieMap = new HashMap<String, Cookie>(); for (Cookie ck : request.getCookies()) { cookieMap.put(ck.getName(), ck); } modelAndView.addObject("cookieMap", cookieMap); } // static method if (modelAndView != null) { modelAndView.addObject("I18nUtil", FtlUtil.generateStaticModel(I18nUtil.class.getName())); } super.postHandle(request, response, handler, modelAndView); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); UserContext.removeUser(); }
@Override public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); final Permission annotation = method.getAnnotation(Permission.class); if (Objects.isNull(annotation)) { return Boolean.TRUE; } final boolean login = annotation.isLogin(); if (login && !LoginServiceImpl.LOGIN_SUCCESS) { request.setAttribute("code", "404"); request.setAttribute("msg", "请您先登录!"); request.getRequestDispatcher("/").forward(request, response); return Boolean.FALSE; } } return super.preHandle(request, response, handler); }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (modelAndView!=null && ArrayUtils.isNotEmpty(request.getCookies())) { HashMap<String, Cookie> cookieMap = new HashMap<String, Cookie>(); for (Cookie ck : request.getCookies()) { cookieMap.put(ck.getName(), ck); } modelAndView.addObject("cookieMap", cookieMap); } super.postHandle(request, response, handler, modelAndView); }
/** * 该方法是需要当前对应的 Interceptor 的 preHandle 方法的返回值为 true 时才会执行。 * 该方法将在整个请求完成之后(也就是 DispatcherServlet 渲染了视图)执行。 * 这个方法的主要作用是清理资源,当然这个方法也只能在当前这个 Interceptor 的 preHandle 方法的返回值为 true 时才会执行。 * {@inheritDoc} */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); }
@Override public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); final Permission annotation = method.getAnnotation(Permission.class); if (Objects.isNull(annotation)) { return Boolean.TRUE; } final boolean login = annotation.isLogin(); if (login) { if (!LoginServiceImpl.LOGIN_SUCCESS) { request.setAttribute("code", "404"); request.setAttribute("msg", "please login!"); request.getRequestDispatcher("/").forward(request, response); return Boolean.FALSE; } } } return super.preHandle(request, response, handler); }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); }
@Override public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); final Permission annotation = method.getAnnotation(Permission.class); if (Objects.isNull(annotation)) { return Boolean.TRUE; } final boolean login = annotation.isLogin(); if (login) { if (!LoginServiceImpl.LOGIN_SUCCESS) { request.setAttribute("code", "404"); request.setAttribute("msg", "请登录!"); request.getRequestDispatcher("/").forward(request, response); return Boolean.FALSE; } } } return super.preHandle(request, response, handler); }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); }
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod method = ((HandlerMethod) handler); TwoFactor factor = method.getMethodAnnotation(TwoFactor.class); if (factor == null || factor.ignore()) { return true; } String userId = Authentication.current() .map(Authentication::getUser) .map(User::getId) .orElse(null); TwoFactorValidator validator = validatorManager.getValidator(userId, factor.value(), factor.provider()); if (!validator.expired()) { return true; } String code = request.getParameter(factor.parameter()); if (code == null) { code = request.getHeader(factor.parameter()); } if (StringUtils.isEmpty(code)) { throw new NeedTwoFactorException(factor.message(), factor.provider()); } else if (!validator.verify(code, factor.timeout())) { throw new NeedTwoFactorException("验证码错误", factor.provider()); } } return super.preHandle(request, response, handler); } }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { FilterContextHandler.remove(); super.afterCompletion(request, response, handler, ex); } }
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (!(handler instanceof HandlerMethod)) { return super.preHandle(request, response, handler); } // if need login boolean needLogin = true; boolean needAdminuser = false; HandlerMethod method = (HandlerMethod)handler; PermessionLimit permission = method.getMethodAnnotation(PermessionLimit.class); if (permission!=null) { needLogin = permission.limit(); needAdminuser = permission.superUser(); } // if pass if (needLogin) { XxlApiUser loginUser = loginService.ifLogin(request); if (loginUser == null) { response.sendRedirect(request.getContextPath() + "/toLogin"); //request.getRequestDispatcher("/toLogin").forward(request, response); return false; } if (needAdminuser && loginUser.getType()!=1) { throw new RuntimeException("权限拦截"); } request.setAttribute(LoginService.LOGIN_IDENTITY, loginUser); } return super.preHandle(request, response, handler); }
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); }
@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { super.afterCompletion(request, response, handler, ex); userHolder.clean(); }
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return super.preHandle(request, response, handler); }
/** * 这个方法只会在当前这个 Interceptor 的 preHandle 方法返回值为 true 时才会执行。 * postHandle 是进行处理器拦截用的,它的执行时间是在处理器进行处理(也就是调用 Controller 的方法)之后执行,但是它会 * 在 DispatcherServlet 进行视图的渲染之前执行,也就是说在这个方法中你可以对 ModelAndView 进行操作。 * 这个方法的链式结构跟正常访问的方向是相反的,也就是说先声明的 Interceptor 的该方法反而会后调用,这跟 Struts2 里面 * 的拦截器的执行过程有点像,只是 Struts2 里面的 intercept 方法中要手动的调用 ActionInvocation 的 invoke 方法, * Struts2 中调用 ActionInvocation 的 invoke 方法就是调用下一个 Interceptor 或者是调用 action,然后要在 Interceptor * 之前调用的内容都写在调用 invoke 之前,要在 Interceptor 之后调用的内容都写在调用 invoke 方法之后。 * {@inheritDoc} */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { super.postHandle(request, response, handler, modelAndView); }