Spring Security: проверка подлинности приводит к HTTP 405 «Метод не разрешен» - PullRequest
0 голосов
/ 11 марта 2020

Я использую CSRF в своем коде в Spring-Security. xml. Я думаю, что проблемы связаны с CSRF. Весь код работает, но есть проблемы с логином. 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";
    }
}

Это мой код при входе в систему. 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>

При открытии открывается страница

enter image description here

, но когда я захожу на главную страницу, такая ошибка вылетает, например

enter image description here

Что я должен исправить мой код?

1 Ответ

1 голос
/ 11 марта 2020

Я думаю, что ошибка в том, что вам не хватает login-processing-url, то есть URL, по которому Spring Login запускает процесс аутентификации.

Добавление его через XML:

login-processing-url="/security"

В качестве альтернативы, если вы не хотите добавить ее sh, создайте форму для отправки своего запроса POST на /login, который является URL-адресом по умолчанию для Spring для запуска аутентификации (для Spring Security 4 и выше).

Подробнее здесь .

...