java option请求_如何在Spring Boot中处理HTTP OPTIONS请求?

选项1:Spring Boot属性(仅限Spring Boot 1.3.0)

从Spring Boot 1.3.0开始,可以使用以下属性配置此行为:

spring.mvc.dispatch-options-request=true

选项2:自定义DispatcherServlet

Spring Boot中的 DispatcherServlet 由 DispatcherServletAutoConfiguration 定义 . 您可以在配置类中的某个位置创建自己的 DispatcherServlet bean,而不是自动配置中的bean:

@Bean(name = DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)

public DispatcherServlet dispatcherServlet() {

DispatcherServlet dispatcherServlet = new DispatcherServlet();

dispatcherServlet.setDispatchOptionsRequest(true);

return dispatcherServlet;

}

但请注意,定义 DispatcherServlet bean将禁用自动配置,因此您应手动定义autoconfiguration类中声明的其他bean,即 ServletRegistrationBean for DispatcherServlet .

选项3:BeanPostProcessor

您可以创建 BeanPostProcessor 实现,在初始化bean之前将 dispatchOptionsRequest 属性设置为 true . Yoy可以把它放在你的配置类中:

@Bean

public DispatcherServletBeanPostProcessor dispatcherServletBeanPostProcessor() {

return new DispatcherServletBeanPostProcessor();

}

public static class DispatcherServletBeanPostProcessor implements BeanPostProcessor {

@Override

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {

if (bean instanceof DispatcherServlet) {

((DispatcherServlet) bean).setDispatchOptionsRequest(true);

}

return bean;

}

@Override

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

return bean;

}

}

选项4:SpringBootServletInitializer

如果您的应用程序中有 SpringBootServletInitializer ,则可以执行以下操作以启用OPTIONS调度:

public class ServletInitializer extends SpringBootServletInitializer {

@Override

protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {

return application.sources(Application.class);

}

@Override

public void onStartup(ServletContext servletContext) throws ServletException {

super.onStartup(servletContext);

servletContext.getServletRegistration(DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME)

.setInitParameter("dispatchOptionsRequest", "true");

}

}

但是,只有在将应用程序作为WAR部署到Servlet容器中时才会起作用,因为在使用 main 方法运行Spring Boot应用程序时不会执行 SpringBootServletInitializer 代码 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值