如何使用Spring MVC处理HTTP OPTIONS?
2022-09-01 13:59:17
我想使用Spring MVC使用我的控制器拦截OPTIONS请求,但它被DispatcherServlet捕获。我该如何管理?
我想使用Spring MVC使用我的控制器拦截OPTIONS请求,但它被DispatcherServlet捕获。我该如何管理?
我为初学者的Bozho答案添加了更多细节。有时,让 Spring 控制器管理 OPTIONS 请求会很有用(例如,设置正确的“Access-Control-Allow-*”标头来为 AJAX 调用提供服务)。但是,如果您尝试通常的做法
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.OPTIONS, value="/**")
public void manageOptions(HttpServletResponse response)
{
//do things
}
}
它不起作用,因为 DispatcherServlet 将拦截客户端的 OPTIONS 请求。
解决方法非常简单:
你必须...从 web.xml 文件中配置 DispatcherServlet,如下所示:
...
<servlet>
<servlet-name>yourServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
添加“dispatchOptionsRequest”参数并将其设置为 true。
现在,DispatcherServlet 会将 OPTIONS 处理委托给你的控制器,并且 manageOption() 方法将执行。
希望这有帮助。
PS.说实话,我看到DispatcherServlet将允许的方法列表附加到响应中。就我而言,这并不重要,我放手了。也许需要进一步的检查。
@RequestMapping(value="/youroptions", method=RequestMethod.OPTIONS)
public View getOptions() {
}
您应该通过将调度程序Servlet设置为dispatchOptionsRequest
true