У меня есть раздел сайта (все под /secure
URL), который я пытаюсь обеспечить с помощью Spring Security 3.2.5. Я использую следующую конфигурацию XML:Spring Security с конфигурацией XML не аутентифицирует пользователя
<http use-expressions="true">
<intercept-url pattern="/secure/login" access="permitAll" />
<intercept-url pattern="/secure/**" access="isAuthenticated()" />
<form-login default-target-url="/secure/home" always-use-default-target="true" login-page="/secure/login" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user" password="password" authorities="ROLE_SECURE" />
</user-service>
</authentication-provider>
</authentication-manager>
Я пытаюсь использовать форму пользовательского входа в систему, для которой у меня есть этот контроллер:
@Controller
@RequestMapping(value = "/secure")
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String getLogin() {
return "secure/login";
}
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String getHome() {
return "secure/home";
}
}
и этот код внутри страницы входа:
<form method="POST" action="<c:url value="/secure/login" />">
username: <input type="text" name="username" /><br/>
password: <input type="password" name="password" /><br/>
<input type="submit" value="Login" />
</form>
у меня есть контекст безопасности, загруженный в web.xml
с помощью ContextLoaderListener
и springSecurityFilterChain
делегирования прокси-фильтр тоже setup.
Когда я пытаюсь получить доступ к адресу /secure
, я получаю перенаправление на /secure/login
, мой контроллер вызывается в методе getLogin
, и я вижу свою страницу входа. Все в порядке.
Теперь моя проблема: что я представить в форме входа отправляется непосредственно в LoginController
и я получаю исключение о том, что POST не поддерживается метод, который имеет смысл, потому что нет ни одного обработчика POST в контроллере ,
Если добавить метод, как это в контроллере:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String postLogin() {
return "redirect:/secure/home";
}
Я больше не получаю ошибку, но мой postLogin
метод вызывается которым отправляет меня /secure/home
неаутентифицированное, который затем перенаправляет меня /secure/login
и я в исходную точку.
Я не знаю, что я делаю неправильно. Все примеры, которые я вижу в Интернете, - это Java, которые я предпочитаю не использовать, и все рабочие процессы происходят в контексте приложения, не под каким-то дополнительным URL-адресом (в моем случае /secure
).
Что мне не хватает?