我已按照Example Link 链接创建了登录应用程序。我没有在项目中使用maven。
当iam运行应用程序http://localhost:9889/SpringMVCDemo/login
时重定向到以下链接
http://localhost:9889/SpringMVCDemo/j_spring_security_check
我收到以下错误。
在控制台中,我收到以下错误消息
INFO: Server startup in 18487 ms
Aug 10, 2015 4:07:54 PM org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported
在浏览器中
HTTP Status 405 - Request method 'POST' not supported
type Status report
message Request method 'POST' not supported
description The specified HTTP method is not allowed for the requested resource.
Apache Tomcat / 8.0.24
修改 的login.jsp
<html>
<head><title>Login</title></head>
<body>
<h1>Login</h1>
<form name='f' action="j_spring_security_check" method='POST' >
<table>
<tr>
<td>User:</td>
<td><input type='text' name='username' value=''></td>
</tr>
<tr>
<td>Password:</td>
<td><input type='password' name='password' /></td>
</tr>
<tr>
<td><input name="submit" type="submit" value="submit" /></td>
</tr>
</table>
</form>
</body>
</html>
弹簧安全
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<http use-expressions="true">
<intercept-url pattern="/" access="isAnonymous()" />
<intercept-url pattern="/welcome" access="isAnonymous()" />
<intercept-url pattern="/login" access="isAnonymous()" />
<intercept-url pattern="/logout" access="isAnonymous()" />
<intercept-url pattern="/userInfo"
access="hasAnyRole('ROLE_USER', 'ROLE_ADMIN')" />
<intercept-url pattern="/admin" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/other/**" access="isAuthenticated()" />
<access-denied-handler error-page="/403" />
<form-login login-page='/login' login-processing-url="/j_spring_security_check"
default-target-url="/userInfo" always-use-default-target="false"
authentication-failure-url="/login?error=true" username-parameter="username"
password-parameter="password" />
<logout logout-url="/logout" logout-success-url="/logoutSuccessful"
delete-cookies="JSESSIONID" invalidate-session="true" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user1" password="12345" authorities="ROLE_USER" />
<user name="admin1" password="12345" authorities="ROLE_USER, ROLE_ADMIN" />
</user-service>
</authentication-provider>
<!-- authentication from database -->
<authentication-provider>
<jdbc-user-service data-source-ref="myDataSource"
users-by-username-query="select username,password, enabled from users where username=?"
authorities-by-username-query="select username, role from users where username=?" />
</authentication-provider>
</authentication-manager>
</beans:beans>
我已经在堆栈溢出中读到了一些答案,但是dint找到了解决方案。
有人可以帮助我。
答案 0 :(得分:1)
感谢@JohnnyAW建议在网上做更多的R&amp; D,我找到了在登录页面中实现CSRF令牌所需的答案。
当我在登录页面添加上述行时,它正常工作。
答案 1 :(得分:0)
最简单的方法是将登录表单中的请求方法更改为“GET”。在loginPage.jsp
中更改此格式:
<form name='f' action="j_spring_security_check" method='GET'>
编辑:实际上您不希望将登录请求作为'GET'请求发送,因为您可以在日志文件中看到凭据。它可以用于测试目的,但在某些时候你会想要将请求更改为'POST'
答案 2 :(得分:0)
我在将一个角度应用程序与Spring集成时遇到了类似的问题。想在这里分享修复作为答案,以帮助未来的读者。
根据post here,我在Spring Security中启用了基本身份验证,并尝试从角度应用程序发出登录请求。
http.post(this.loginUrl, {}, options);
由于基本身份验证不接受POST方法,因此得到以下错误,
Aug 30, 2017 5:47:30 PM org.springframework.web.servlet.PageNotFound handleHttpRequestMethodNotSupported
WARNING: Request method 'POST' not supported
要解决此问题,我刚刚在角度应用中更改了服务调用,如下所示,并且有效。
http.request(this.loginUrl, options);
答案 3 :(得分:0)
在行动中使用CSRF令牌-
<form name='f' action="j_spring_security_check?${_csrf.parameterName}=${_csrf.token}" method='POST' >
希望这会起作用。