Форма аунтефикации не работает

 
 
 
Сообщения:110
Разбираюсь сейчас в spring security и возникла проблема в следующем:

<form-login login-processing-url="/static/j_spring_security_check"
                    login-page="/login"
                    authentication-failure-url="/login?login_error=t"/>

В книге из которой беру пример написано:
Атрибут login-page определяет новый относительный путь к странице аутентификации. В данном случае указывается, что страница
аутентификации будет иметь относительный путь /login, который в конечном итоге обслуживается контроллером Spring MVC.

Контроллер:
@Controller
@RequestMapping({"/login"})
public class LoginController {
    @RequestMapping(method=GET)
    public String showLoginForm(Map<String, Object> model) {
        System.out.println("This is ///// 1 ");
        Spittle spittle = new Spittle();
        System.out.println("This is ///// 1 ");
        model.put("spittle",spittle);
        System.out.println("This is ///// 1 ");
        return "home";
    }
}


А это элемент из формы:
.....
<form class="signin" action="<s:url value="/static/j_spring_security_check"/>" method="post">
.....
   <input id="submit" type="submit" value="Sign In!" name="commit"/>

При нажатии кнопки входа, то бишь submit меня перенаправляет на http://localhost:8080/ и в сам метод showLoginForm() приложение не заходит. Хотя надо чтобы зашло- это решит все проблемы,плюс те, которые описаны снизу. ПОтому что, в станице jsp которая обязана отобразиться есть элемент кода:
<sec:authorize access="hasRole('ROLE_SPITTER')">
        <s:url value="/spittles" var="spittle_url" />
        <sf:form modelAttribute="spittle"
                 method="POST"
                 action="${spittle_url}">
            <sf:label path="text">
                <s:message code="label.spittle"
                           text="Enter spittle:"/>
            </sf:label>
            <sf:textarea path="text" rows="2" cols="40" />
            <sf:errors path="text" />
            <br/>
            <div class="spitItSubmitIt">
                <input type="submit" value="Spit it!"
                       class="status-btn round-btn disabled" />
            </div>
        </sf:form>
    </sec:authorize>

И конечно этот код работать не будет так как java не знает про spittle в modelAttribute="spittle"
Ну и естественно ошибка, куда же без нее:
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'spittle' available as request attribute
Вопрос как сделать так чтобы при нажатии кнопки входа - submit, приложение перешло в метод showLoginForm() который отображен на /login ?

Кунг-фу принцип: не сталкиваться лоб в лоб с внешними силами,а прогнуться под их давлением с тем, чтобы, разогнувшись, стать еще сильнее.
Изменен:09 июл 2016 16:01
 
 
Сообщения:139
Особо в спринг секюрити не силен, но вижу, что вы назначили ссылку /login (login-page="/login") на готовый (встроенный) спринговский контроллер, но в то же время вы создали и свой контроллер с такой же линкой /login. Из-за этого возникает конфликт имен, который приводит к тому, что к вашему контроллеру, просто, не доходит очередь и он не выполняется.
 
 
Сообщения:110
Вообщем попробовал и удалять и переименовывать, login-page="/login", все равно не работает. В примерах на различных сайтах, этот атрибут представлен в виде: login-page="/login.jsp", а в книге login-page="/login". Само описание атрибута:
Tag name: login-page Description : The URL for the login page. If no login URL is specified, Spring Security will automatically create a login URL at /spring_security_login and a corresponding filter to render that login URL when requested.
Я как понимаю в атрибуте надо писать url адрес который потом в контроллере надо маппить: @RequestMapping(value = "/login", method=GET).
Или это не так?

Кунг-фу принцип: не сталкиваться лоб в лоб с внешними силами,а прогнуться под их давлением с тем, чтобы, разогнувшись, стать еще сильнее.
 
 
Сообщения:110
Решил вопрос так:
default-target-url="/login"

    @RequestMapping(value = "/login", method=GET)
    public String showLoginForm(Map<String, Object> model) {
        заполнил модель и вернул имя
    }

Кунг-фу принцип: не сталкиваться лоб в лоб с внешними силами,а прогнуться под их давлением с тем, чтобы, разогнувшись, стать еще сильнее.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет