在springmvc+springsecurity的项目中,若使用POST方式登录, 则出现以下问题:
“HTTP Status 405 - Request method 'GET' not supported”
其中security.xml配置为:
<http pattern="/loginPage" security="none"></http>
<http pattern="*.js" security="none"/>
<http pattern="*.css" security="none"/>
<http pattern="*.gif" security="none"/>
<http pattern="*.png" security="none"/>
<http pattern="*.jpg" security="none"/>
<!-- HTTP拦截 -->
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" method="POST"/>
<!-- 表单登录验证 -->
<form-login login-page="/loginPage" login-processing-url="/login"
always-use-default-target="true" default-target-url="/welcome"
authentication-failure-url="/loginPage?error=error"
username-parameter="username" password-parameter="password" />
<!-- 跨区域验证关闭 -->
<csrf disabled="true" />
<!-- 注销验证 -->
<logout logout-url="/logout" logout-success-url="/loginPage"
invalidate-session="true" />
<!-- 自动记忆配置 -->
<remember-me key="authorition" />
</http>
spring mvc.xml为
<mvc:annotation-driven />
<!-- 使Spring支持自动检测组件,自动扫描controller -->
<context:component-scan base-package="com.security.controller" />
<!-- 静态资源访问 -->
<mvc:resources location="/js/" mapping="/js/**" />
<!-- 定义视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp"></property>
</bean>
两者均比较简单;
页面登录请求为:
<form name="loginForm" action="<c:url value='/login' />" method="POST">
而login是由springsecurity提供的, 默认是要POST方法才能登录。
现在看看/welcome这个请求的处理代码:
@RequestMapping(value={"/welcome","/"},method=RequestMethod.POST)
public String welcome(Model model){
System.out.println("Login success");
URL请求地址:
最后报错如下:
九月 28, 2017 11:26:50 上午 org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported
WARNING: Request method 'GET' not supported
九月 28, 2017 11:26:50 上午 org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver logException
WARNING: Handler execution resulted in exception: Request method 'GET' not supported
请大神帮忙看看,谢谢。
刚才仔细看了一下default-target-url的描述:
Attribute:default-target-urlTheURLthatwillberedirectedtoaftersuccessfulauthentication,iftheuser'spreviousactioncouldnotberesumed.Thisgenerallyhappensiftheuservisitsaloginpagewithouthavingfirstrequestedasecuredoperationthattriggersauthentication.Ifunspecified,defaultstotherootoftheapplication.
TheURLthatwillberedirectedtoaftersuccessfulauthentication
redirected,是get方法了,没办法咯。
我猜这样理解应该是正确的,大伙讨论讨论呗.
不知道是不是对大伙有帮助呢?
@RequestMapping(value={"/welcome","/"},method=RequestMethod.POST)
登陆成功的页面需要使用GET访问,你的是POST的,修改为RequestMethod.GET
是的,我后面仔细去看了配置的说明楼上正解
刚才仔细看了一下default-target-url的描述:
Attribute:default-target-urlTheURLthatwillberedirectedtoaftersuccessfulauthentication,iftheuser'spreviousactioncouldnotberesumed.Thisgenerallyhappensiftheuservisitsaloginpagewithouthavingfirstrequestedasecuredoperationthattriggersauthentication.Ifunspecified,defaultstotherootoftheapplication.
TheURLthatwillberedirectedtoaftersuccessfulauthentication
redirected,是get方法了,没办法咯。
我猜这样理解应该是正确的,大伙讨论讨论呗.
不知道是不是对大伙有帮助呢?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。