Spring Security:身份验证导致 HTTP 405“方法不允许”
Posted
技术标签:
【中文标题】Spring Security:身份验证导致 HTTP 405“方法不允许”【英文标题】:Spring Security: Authentication results in HTTP 405 "Method not allowed" 【发布时间】:2020-06-23 19:53:40 【问题描述】:我在 spring-security.xml 的代码中使用 csrf。 我认为这些问题与csrf有关。 所有代码都在工作,但 login.jsp 和 spring-security.xml 存在问题。 spring-security.xml 看起来像这样:
<http auto-config="true">
<intercept-url pattern="/list" access="ROLE_USER"/>
<intercept-url pattern="/security" access="isAnonymous()"/>
<form-login login-page="/security"
default-target-url="/list"
authentication-failure-url="/security?error"
username-parameter="username"
password-parameter="password"/>
<logout logout-success-url="/security?logout"/>
<csrf disabled="true"/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user" password="password" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
我的 LoginController 如下所示:
@Controller
public class LoginController
@RequestMapping(value = "/security", method = RequestMethod.GET)
public String login(@RequestParam(value = "error", required = false) String error,
@RequestParam(value = "logout", required = false) String logout,
Model model)
if (error != null)
model.addAttribute("error", "Invalid username or password");
if (logout != null)
model.addAttribute("msg", "You logout successfully");
return "login";
这是我在 login.jsp 中的代码:
<body onload='document.loginForm.username.focus();'>
<div id="login-box">
<h2>Insert Your Login and password:</h2>
<c:if test="$not empty error">
<div class="error">$error</div>
</c:if>
<c:if test="$not empty msg">
<div class="msg">$msg</div>
</c:if>
<form name='loginForm' action="<c:url value='/security'/>" method="post">
<table>
<tr>
<td>User:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr>
<td colspan="3">
<input name="submit" type="submit" value="submit"/>
</td>
</tr>
</table>
<input type="hidden" name="$_csrf.parameterName" value="$_csrf.token"/>
</form>
</div>
当你打开页面时
但是当我登录到主页时,这样的错误会崩溃
我应该如何修复我的代码?
【问题讨论】:
【参考方案1】:我认为错误是因为您缺少login-processing-url
,这是Spring Login将触发身份验证过程的URL。
通过 XML 添加:
login-processing-url="/security"
或者,如果您不想添加它,请让您的表单将其 POST 请求发送到 /login
,这是 Spring 触发身份验证的默认 URL(对于 Spring Security 4 及更高版本)。
查看更多here。
【讨论】:
以上是关于Spring Security:身份验证导致 HTTP 405“方法不允许”的主要内容,如果未能解决你的问题,请参考以下文章
Spring security 自定义身份验证提供程序总是导致错误的客户端凭据
在身份验证 Spring Security + WebFlux 期间抛出和处理自定义异常
Spring Security:如何在公共页面中识别用户已通过身份验证
我们可以将输入的用户名传递给spring security中的身份验证失败url吗?
#翻译#通往SQL Server安全级别2的阶梯:身份验证; 唐?吉利; 原文链接:Stairway to SQL Server Security Level 2: Authentication ht