当前位置: 首页 > 知识库问答 >
问题:

spring-boot请求到context-path/generates 405方法不允许静态内容出错

牟恺
2023-03-14

我有一个带有context-path/services的Spring Boot应用程序。属性文件中的上下文路径项:

server.servlet.context-path=/services

当我使用URL http://localhost:8080/services/和GET方法时,它工作正常,并返回静态index.html文件作为响应。但是,当我尝试使用相同的URL http://localhost:8080/services/和POST方法时,我会得到以下错误:

{
    "timestamp": "2020-11-11T07:06:37.341+00:00",
    "status": 405,
    "error": "Method Not Allowed",
    "message": "",
    "path": "/services/"
}
o.s.s.web.util.matcher.OrRequestMatcher  : Trying to match using Ant [pattern='/rest/**']
o.s.s.w.u.matcher.AntPathRequestMatcher  : Checking match of request : '/'; against '/rest/**'
o.s.s.web.util.matcher.OrRequestMatcher  : No matches found
o.s.web.servlet.DispatcherServlet        : POST "/services/", parameters={}
pertySourcedRequestMappingHandlerMapping : looking up handler for path: /
o.s.b.a.w.s.WelcomePageHandlerMapping    : Mapped to ParameterizableViewController [view="forward:index.html"]
o.s.s.w.header.writers.HstsHeaderWriter  : Not injecting HSTS header since it did not match the requestMatcher org.springframework.security.web.header.writers.HstsHeaderWriter$SecureRequestMatcher@363fa5d2
w.c.HttpSessionSecurityContextRepository : SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]
o.s.web.servlet.DispatcherServlet        : Completed 405 METHOD_NOT_ALLOWED

共有1个答案

林鹏鹍
2023-03-14

报告了一个spring问题:https://github.com/spring-projects/spring-framework/issues/22140。但是spring也明确表示,他们不会进行任何此类更改,因为对静态资源的请求不应该是POST类型,因为我们不是试图修改它们,而是试图获得它们。

我正在寻找一个解决方案,因为我必须在上下文根支持POST(因为SSO-IDP需求)。所以我尝试在筛选器中复制302重定向行为。在其中一个筛选器中,我检查了请求方法POST,请求URI/services/并将请求重定向到/services/。这将POST请求转换为path/services/处的GET,并且可以工作。

// Inside doFilter() method of a Filter
if ("POST".equalsIgnoreCase(httpRequest.getMethod()) && "/services/".equalsIgnoreCase(httpRequest.getRequestURI())) {
    httpResponse.sendRedirect("/services/"); // This converts the POST request to GET request
    return;
}

在filter中引入此行为后,当我将请求发送到http://localhost:8080/services/时,从上面的筛选器中,使用GET方法将请求重定向到http://localhost:8080/services/,并获得所需的index.html作为响应。

 类似资料:
  • 在过去的几天里,我一直在和Spring保安公司战斗,所以我希望有人能在这里帮助我。 我正在使用Spring Boot 1.2.5 我使用的是Spring Actuator和Spring Remote Shell,它们已经从类路径中删除,认为它们可能会引起问题 我排除了SecurityAutoConfigsion,因为它可能会导致我的问题 这是我的主要课程 这是我的安全配置 我的问题/问题是 > C

  • 问题内容: 该应用程序使用JDK 8,Spring Boot和Spring Boot Jersey启动程序,并打包为WAR(尽管它是通过Spring Boot Maven插件在本地运行的)。 我想做的是将我在运行中(在构建时)生成的文档作为欢迎页面。 我尝试了几种方法: 通过按照此处所述配置 适当的init参数,让Jersey提供静态内容 引入以便将生成的HTML文档作为欢迎文件列出。 这些都没有

  • 该应用程序使用JDK8、Spring Boot和Spring Boot Jersey starter,并被打包为WAR(尽管它是通过Spring Boot Maven插件在本地运行的)。 我想做的是将我生成的文档(在构建时)作为欢迎页面。 我尝试了几种方法: 通过在中配置正确的init参数,让Jersey提供静态内容,如下所述 引入以便将生成的HTML文档列为欢迎文件。 这些都没有成功。 我希望避

  • 问题内容: 我无法让Spring-boot项目提供静态内容。 我已经放在一个命名的文件夹下。在其中,我有一个名为的文件夹。当我打包应用程序并运行它时,它找不到我放在该文件夹中的图像。 我试图把静态文件中,并但没有任何工程。 如果我我可以看到文件在正确文件夹的jar中:例如,但是调用:http://localhost:8080/images/head.png,我得到的只是一个404 有什么想法为什么

  • 我试图从我的一个控制器调用Illumbite\Http\Request has方法。 完全遵循文档,但我遇到了一个错误: 假设$this来自不兼容的上下文,则不应静态调用非静态方法Illumbite\Http\Request::has() 我不确定我在这里做错了什么,我试着尽可能仔细地阅读文档。

  • 我正在使用ajax进行表单更新。当我在ajax中使用GET方法时,它工作得很好,但当我使用Post方法时,它抛出了错误405 method,这是不允许的。我正在本地主机上测试这个。我以前在localhost中做过,效果很好。顺便说一句,我用的是Laravel5.2。 这是我的ajax代码。 这是我在视图中使用的脚本 这是我的路线 当ajax函数和路由中的方法更改为GET时,它会打印在控制台中传递的