猿问

始终在 @RequestMapping 函数之前调用函数

我正在使用 spring 框架创建 API spring 服务。

我为我定义的每个端点都有几个 @RequestMapping 函数。在每个 @RequestMapping 函数中,我都有一个函数可以在继续之前检查多个授权变量。

我可以在转发到相关的@RequestMapping函数之前将此授权函数放到特定的函数中吗?


烙印99
浏览 134回答 5
5回答

扬帆大鱼

您可以使用HandlerInterceptor。编写自己的拦截器或扩展并使用现有的实现

繁花不似锦

HandlerInterceptor您想要的是其他地方建议的实现。然而,从您对该答案的评论来看,您误解了 API:我已在您提供的文档链接中阅读了 preHandle 方法。但它返回布尔值。我可以使用此方法返回 JSON 输出吗?正如 API 文档所指出的,布尔值仅向框架发出信号:是否应继续处理:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerInterceptor.html#preHandle-javax.servlet.http.HttpServletRequest-javax.servlet.http.HttpServletResponse-java.lang.Object-如果执行链应继续执行下一个拦截器或处理程序本身,则返回 true。否则,DispatcherServlet 假定该拦截器本身已经处理了响应。所以要返回 JSON:public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{    if(someCondition){      return true; //continue processing    }else{      response.getOutputStream().write("{\"message\" : \"some text\"}");      response.setContentType("text/json");      response.setStatus(...); //some http error code?      response.getoutputStream().flush();      return false; //i have written some JSON to the response. Processing stops here    }}

一只名叫tom的猫

有很多方法可以实现它。通过编写老式的 servlet 过滤器。编写您自己的过滤器来验证请求并处理请求。通过编写弹簧过滤器。通过使用Spring AOP。(受到推崇的)通过编写您自己的注释,它将验证请求,并在您想要验证的方法之上给出。(受到推崇的)可能还有其他方法。

慕桂英4014372

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;@Componentpublic class ServiceInterceptor implements HandlerInterceptor {   @Override   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {      System.out.println("Pre Handle method is Calling");      return true;   }   @Override   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {      System.out.println("Post Handle method is Calling");   }   @Override   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception {      System.out.println("Request and Response is completed");   }}

慕后森

为控件创建一个过滤器,并在过滤器链中进行所需的参数检查
随时随地看视频慕课网APP

相关分类

Java
我要回答