MaV*_*ldo 27 java http spring-mvc http-options-method
我想使用我的控制器使用Spring MVC拦截OPTIONS请求,但它被DispatcherServlet捕获.我该如何管理?
MaV*_*ldo 34
我为初学者添加了一些更多关于Bozho答案的细节.有时让Spring Controller管理OPTIONS请求是有用的(例如设置正确的"Access-Control-Allow-*"标头来提供AJAX调用).但是,如果你尝试通常的做法
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.OPTIONS, value="/**")
public void manageOptions(HttpServletResponse response)
{
//do things
}
}
Run Code Online (Sandbox Code Playgroud)
它将无法工作,因为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>
...
Run Code Online (Sandbox Code Playgroud)
添加"dispatchOptionsRequest"参数并将其设置为true.
现在,DispatcherServlet将OPTIONS处理委托给您的控制器,manageOption()方法将执行.
希望这可以帮助.
PS.说实话,我看到DispatcherServlet将允许的方法列表附加到响应中.在我的情况下,这并不重要,我放弃了.也许需要进一步的考试.
Boz*_*zho 12
@RequestMapping(value="/youroptions", method=RequestMethod.OPTIONS)
public View getOptions() {
}
Run Code Online (Sandbox Code Playgroud)
您应该通过将其设置为dispatchOptionsRequest来配置dispatcherServlettrue
作为上述2个答案的快速补充,这里是如何在servlet 3(无web.xml)环境中启用dispatchOptionsRequest,因为我花了一些时间来研究如何在非xml设置中应用上述答案.
在spring 3.2/servlet 3环境中,你将拥有一些 DispatcherServlet初始化类,它们是web.xml的java等价物; 在我的情况下,它是AbstractAnnotationConfigDispatcherServletInitializer.添加以下代码将启用dispatchOptionsRequest:
@Override
protected void customizeRegistration(Dynamic registration) {
registration.setInitParameter("dispatchOptionsRequest", "true");
}
Run Code Online (Sandbox Code Playgroud)