Как добавить сообщение в сеанс, когда требуется вход в систему безопасности Spring? - PullRequest
2 голосов
/ 27 марта 2012

У меня приличная система входа, работающая с безопасностью Spring 3.

Если пользователь пытается получить доступ к защищенной странице до входа в систему, он возвращается на страницу входа в систему, а затем при успешном входе в систему он перенаправляется обратно на страницу, к которой он пытался получить доступ ранее. Это почти то, что я хочу.

Я также хочу, чтобы на странице входа в систему появилось специальное сообщение об ошибке, объясняющее пользователю, что он был перенаправлен туда, потому что он пытался получить доступ к безопасной области. Как я могу это сделать (не отображая это сообщение об ошибке на странице входа для пользователей, которые ранее не пытались получить доступ к защищенной странице)?

Спасибо!

P.S. Я прочитал http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#getting-started и много постов на этом сайте и других, но не нашел решения.

Ответы [ 4 ]

0 голосов
/ 19 февраля 2013

Я не думаю, что какой-либо из ответов здесь обеспечивает чистое общее решение исходной проблемы. Я не понимаю решения ОП, и оно может быть специфичным для его ситуации.

Когда пользователь нажимает на защищенный URL, Spring перенаправляет пользователя на страницу входа. Исходный запрос сохраняется в сеансе. И Spring не передает ни одного из параметров в исходном запросе на страницу входа.

Вы можете добавить что-то вроде следующего в login.jsp:

<%
        if((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST") != null && ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG") != null){
    out.println('<%= ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG")[0]%>');    
        }
        %>

Где LOGINMSG - это пользовательское сообщение для входа конечного пользователя, которое вы добавили к исходному безопасному URL.

Я надеюсь, что весенняя служба безопасности включит и подтвердит (или лишит законной силы) этот подход.

0 голосов
/ 27 марта 2012

Вы используете JSP?Тогда что-то вроде this может быть полезным.
Хотите настроить сообщение об ошибке в Spring Security?Взгляните здесь .

0 голосов
/ 28 марта 2012

Отображение сообщения об ошибке на странице входа, это что-то, что сделано автоматически Spring.Вы можете увидеть, как это обсуждается здесь .Я думаю, что это больше относится к отображению ошибки входа в систему как «Плохие учетные данные», но все равно имейте это в виду.

В вашем случае отображение сообщения об ошибке, связанного с отказом в доступе, можно сделать, просто определив страницу отказа в доступе ввесенняя конфигурация безопасности.

Обычно вы можете увидеть что-то вроде этого:

<http auto-config="true" access-denied-page="/403.jsp">
....
</http>

, но вы также можете сделать это и контролировать вход в jsp, если в запросе появляется переменная myError:

<http auto-config="true" access-denied-page="/login.jsp?myError=access-denied">
....
</http>
0 голосов
/ 27 марта 2012

На странице входа в систему jsp вы можете получить реферер заголовка HTTP (например, с помощью jstl - ${header['referer']}), который сообщит вам, к какой странице пользователь пытался получить доступ, прежде чем перенаправиться на эту страницу входа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...