代码之家  ›  专栏  ›  技术社区  ›  blackdog

如何在Springboot中禁止'DELETE'http请求?

  •  2
  • blackdog  · 技术社区  · 6 年前

    安全部门要求我们禁止 DELETE 如果我们不需要在应用程序中使用它,还可以使用其他一些http请求方法。在里面 SpringMVC 我可以添加 security-constraint 在里面 web.xml 像这样:

    <security-constraint>  
    <display-name>delete-method</display-name>  
    <web-resource-collection>  
        <web-resource-name>unsafe-method</web-resource-name>  
        <url-pattern>/*</url-pattern>
        <http-method>DELETE</http-method>
    </web-resource-collection>  
    <auth-constraint/>  
    

    但我不知道怎么加进去 Springboot .服务器为 tomcat8.x 并在CentOS运行。

    1 回复  |  直到 6 年前
        1
  •  1
  •   htshame    6 年前

    你可以用 CORS 对其进行筛选。您可以指定允许 HTTP 请求类型。

    示例来自 the Spring docs :

    <mvc:cors>
    
        <mvc:mapping path="/api/**"
            allowed-origins="http://domain1.com, http://domain2.com"
            allowed-methods="GET, PUT"
            allowed-headers="header1, header2, header3"
            exposed-headers="header1, header2" allow-credentials="false"
            max-age="123" />
    
        <mvc:mapping path="/resources/**"
            allowed-origins="http://domain1.com" />
    
    </mvc:cors>
    

    你可以用 Java .

    这是答案 nice implementation

    @Component
    public class CorsFilter extends OncePerRequestFilter {
    
        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, OPTIONS");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "authorization, content-type, xsrf-token");
            response.addHeader("Access-Control-Expose-Headers", "xsrf-token");
            if ("OPTIONS".equals(request.getMethod())) {
                response.setStatus(HttpServletResponse.SC_OK);
            } else {
                filterChain.doFilter(request, response);
            }
        }
    }