加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – Spring可以在OPTIONS方法上自动生成’Allow’标头吗?

发布时间:2020-12-15 01:48:16 所属栏目:大数据 来源:网络整理
导读:当我在Spring MVC中配置我的RequestMappings时,我想在使用OPTIONS方法时自动生成适当的Allow标头. 例如,使用此控制器: @Controller@RequestMapping("/test")public class TestController { @RequestMapping(method = RequestMethod.GET) ResponseEntity 现

当我在Spring MVC中配置我的RequestMappings时,我想在使用OPTIONS方法时自动生成适当的Allow标头.

例如,使用此控制器:

@Controller
@RequestMapping("/test")
public class TestController {

    @RequestMapping(method = RequestMethod.GET)
    ResponseEntity

现在如果我对该URL做OPTIONS请求,我得到405,方法不允许.相反,我希望它能自动回复

允许:获取,选项和204 – 没有内容

我有一个想法添加拦截器,如下所示:

@Override 
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new HandlerInterceptor() {
        @Override
        public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {
            if("OPTIONS".equalsIgnoreCase(request.getMethod())){
                response.setHeader("Allow","GET,OPTIONS");
                response.setStatus(204);
                //TODO figure out the @Controller and what possible methods exist
                return false;
            }
            return true;
        }
        //Deleted excess methods for brevity
    });
}

没有我编写自定义拦截器,这个功能是否存在?如果没有,我如何解决TODO并查找OPTIONS调用发生在同一URL上的注释?

最佳答案
延伸Sotiros和jhadesdev的答案.如果使用Java Config(如在Spring Boot中),您可以通过配置@Bean来配置DispatchServlet以启用OPTIONS请求,如下所示:

@Bean
public DispatcherServlet dispatcherServlet() {
    DispatcherServlet servlet = new DispatcherServlet();
    servlet.setDispatchOptionsRequest(true);
    return servlet;
}

然后我创建了一个静态助手,接受HttpMethods varargs,如下所示:

public static ResponseEntity

这使得创建我自己的OPTIONS映射变得如此简单:

@RequestMapping(method = RequestMethod.OPTIONS)
ResponseEntity

虽然我认为Spring MVC可以自动提供OPTIONS响应,但你不能通过Interceptor,但可能通过自定义的DispatcherServlet.

编写自己的OPTIONS响应的好处是,在某些情况下根据用户的角色自定义OPTIONS是有意义的.例如,API的未经身份验证的用户可能会收到允许GET,OPTIONS但管理员会获得完整的API允许GET,PUT,DELETE,OPTIONS您可以根据在进行OPTIONS调用时检查用户的角色来自定义响应.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读