SpringMVC HTTP Status 405 - JSPs only permit GET POST or HEAD

在运用SpringMVC_RequestMapping_HiddenHttpMethodFilter 过滤器时,如果你的web项目是运行在Tomcat 8下,你会发现被过滤成DELETE和PUT请求,到达控制器后,返回时(forward)会报HTTP 405的错误提示

HTTP Status 405 - Request method 'DELETE' not supported

HTTP Status 405 - JSPs only permit GET POST or HEAD

有三种解决方案:

(一)将 Tomcat 8 改为 Tomcat 7,在Tomcat 7 下运行是正常的

(二)将请求转发(forward)改为请求重定向(redirect)

(三)自己手动写一个Filter来包装HttpRequest中的getMethod()方法

下面介绍一下第(三)种做法,也就是自己写一个Filter来包装从服务器发回来的HttpRequest请求:

大致说一下流程,

1. 在第1步中,客户端发送请求至服务器,这时如果发送的是POST请求且带有以_method为名的参数会被Spring的HiddenHttpMethodFilter给拦截。

2. HiddenHttpMethodFilter内有一个静态内部类通过继承HttpServletRequestWrapper类并重写getMethod()方法,将该方法返回值设为_method隐藏域的值。

3. HiddenHttpMethodFilter在包装好Request后,将请求发往服务器的控制器中对应的方法处理器,这时的请求变成了图中的 3、WrapperRequest by SpringFilter

4. 服务器处理完请求后,产生了一个forward请求,产生相应的请求处理信息发往客户端,注意这时的request的getMethod()方法仍然是HiddenHttpMethodFilter包装过的

5. 我们需要在服务器的响应请求到达客户端前进行拦截,这也是最关键的一步,通过自定义过滤器MyHttpMethodFilter进一步包装请求,将getMethod()方法返回值改成POST或GET即可

6. 在web.xml中配置该filter,注意dispatcher结点值必须为FORWARD。由于字数超限,暂时说到这。。。

<filter-mapping>

<filter-name>myFilter</filter-name>

<url-pattern>/*</url-pattern>

<dispatcher>FORWARD</dispatcher>

</filter-mapping>



(源自:https://my.oschina.net/kolbe/blog/509810)

HTTP Status 405 - Request method 'POST' not supported表示请求的方法不被支持。这个错误通常出现在Spring Security中的form-login配置中。在配置中,有可能出现多种原因导致这个错误的发生。 首先,可能是由于请求方式不一致导致的。在jsp中使用了POST的提交方式,但在Controller中对应的RequestMapping中没有设置为RequestMethod.POST。解决方法是在Controller中将对应的RequestMapping设置为RequestMethod.POST。 另外,还可能是由于其他配置问题导致的。在Spring Security的form-login配置中,需要正确设置login-processing-url为处理登录请求的路径,以及authentication-success-forward-url为登录成功后跳转的页面的路径。如果这些路径设置不正确,也会导致该错误的发生。确保这些路径正确配置即可。 总之,HTTP Status 405 - Request method 'POST' not supported错误的原因可能是由于请求方式不一致或配置问题导致的。需要检查请求方式和配置路径是否正确配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringSecurity-HTTP Status 405 - Request method ‘POST‘ not supported](https://blog.csdn.net/Oooops_/article/details/113848110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [关于SpringMVC中关于HTTP Status 405 - Request method 'POST' not supported](https://blog.csdn.net/kiki_jay/article/details/81749234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值