【问题标题】:How to disable HTTP POST REQUEST of oData APIs?如何禁用 oData API 的 HTTP POST 请求?
【发布时间】:2019-11-18 20:52:06
【问题描述】:

我正在使用 oData 和 ServletRegistrationBean 设置一个新的 Java 应用程序。 我想禁用接收 POST 请求的选项并只允许 GET 请求。

我应该在哪里设置? 我可以创建一种白名单/黑名单吗?

ServletRegistrationBean odataServRegstration = new ServletRegistrationBean(new CXFNonSpringJaxrsServlet(), "/odata/*");
Map<String, String> initParameters = new HashMap<>();
initParameters.put("javax.ws.rs.Application", "org.apache.olingo.odata2.core.rest.app.ODataApplication");
initParameters.put("org.apache.olingo.odata2.service.factory", "com.sap.context.JPAServiceFactory");
odataServRegstration.setInitParameters(initParameters);
return odataServRegstration;

【问题讨论】:

    标签: java spring api odata olingo


    【解决方案1】:

    在 Spring Security 中,您可以轻松配置,例如只有角色 admin 的用户才能发出非 GetRequest。除非您在此之前在网上找到它,否则我将很快提供一个示例。其他 unseres 将收到 403。

    一个简约的例子是:

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
              .csrf().disable()
              .authorizeRequests()
                .antMatchers(HttpMethod.POST, "/**").hasRole("ADMIN")
                .antMatchers("/**").hasAnyRole("ADMIN","USER")
              .and()
              .httpBasic()
            ;
        }
    

    关注.antMatchers(HttpMethod.POST, "/**").hasRole("ADMIN")

    【讨论】:

    • 好的,我想看看你的例子。
    【解决方案2】:

    这是我禁用 POST 选项的方法。

    @Override
    @RequestMapping(method = {GET,  PATCH, DELETE})
    public void service(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse) throws ServletException {
    
        try {........................
    

    【讨论】:

      猜你喜欢
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 2018-07-19
      • 2016-07-12
      • 1970-01-01
      相关资源
      最近更新 更多