SpringSecurity-HTTP Status 405 - Request method ‘POST‘ not supported

SpringSecurity的小麻烦-HTTP Status 405 - Request method ‘POST’ not supported

先看问题情况:我们想要的是在认证通过以后让页面跳转到authentication-success-forward-url的值所指向的路径,但实际情况下却是405错误HTTP Status 405 - Request method ‘POST’ not supported,由于现在是分享原因我肯定是知道真正问题所在,所以对于一些无关的代码这里不赘述,就按照常规正确配置即可,下面为了突出重点仅仅展示SpringSecurity中form-login中的配置。

		<!-- 定义跳转的具体的页面 -->
        <security:form-login
                login-page="/loginPage"			<!-- 这是登录的页面 -->
                login-processing-url="/login"	<!-- 这是springSecurity代理的登录路径 -->
                default-target-url="/product"	<!-- 这是默认成功后跳转的页面 -->
                authentication-failure-url="/loginPage" <!--失败后跳会登录-->
                authentication-success-forward-url="/product"	<!--登录成功后跳转的页面-->
        />

根据上面的配置,我们希望在我们输入正确的用户名及密码后可以让页面跳转到/product然后发现下面确实是报错了。
报错图
但后台是可以接收到参数的,可以看到下面是可以根据username和password从数据库查到数据的,所以这里按照常规配置后拦截是可以正确拦截的,当登录后并查询出了数据并且交给了SpringSecurity做了校验,又由于没有重新跳转到loginPage所以可以推断出我们的认证是成功了的,但为什么抱405错误却不成功跳转呢? 但如果把表单中的method改为get则SpringSecurity将无法获得参数。
在这里插入图片描述
原因:
1、defaultSuccessUrl和successForwardUrl进行路径跳转的底层实现的方式不同

  • 前者是重定向后者是转发,这点从浏览器地址栏地址可以得到验证,看图可以发现我们的地址仍然是login。
  • 这又是因为registry.addViewController("/success").setViewName(“success”),这种路径映射方式不支持post请求,详细解析可以看 weixin_42074868他的这一篇文章

2、default-target-url与authentication-success-forward-url区别与联系

  • default-target-url:身份验证登陆成功后发送的请求(可以直接写页面,相当于直接跳转到页面;也可以写请求给前端控制器处理)
  • authentication-success-forward-url:在default-target-url发送的请求成功后,再发authentication-success-forward-url指定的请求。(可以直接写也页面,相当于直接请求页面,一般用于default-target-url的后续请求)

解决方法: 这里采用的解决方法就是讲authentication-success-forward-url改为default-target-url,并设置always-use-default-target=“true”
注意:

  • default-target-url一般用来指定登入成功后立马跳转到主界面;
  • authentication-success-forward-url用来指定登入成功且跳到主界面后,发送请求用户其他信息的请求。
  • 如果想要default-target-url生效,必须设置always-use-default-target=“true”

坑-1: 注意中也说明了,如果有其他的请求信息则default就不适用了,还有一种方法是应该重新定义一个Controller并且将Methods=RequestMethod.GET并将其映射到项目中。具体如何操作我还没研究明白,所以先挖个坑在这里,毕竟学到老活到老嘛。如果有懂得小伙伴也欢迎评论为这博客提供你的宝贵意见!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 methodPOST‘ 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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值