Проблема с выходом из Spring Security - PullRequest
9 голосов
/ 18 июня 2010

У меня проблема с выходом из среды Spring.

Сначала, когда я хочу, чтобы j_spring_security_logout обработал его для меня, я получаю 404 j_spring_security_logout не найдено: sample-security.xml:

<http>
    <intercept-url pattern="/messageList.htm*" access="ROLE_USER,ROLE_GUEST" />
    <intercept-url pattern="/messagePost.htm*" access="ROLE_USER" />
    <intercept-url pattern="/messageDelete.htm*" access="ROLE_ADMIN" />
    <form-login login-page="/login.jsp" default-target-url="/messageList.htm"
        authentication-failure-url="/login.jsp?error=true" />
    <logout/>
</http>

Пример URL-ссылки для выхода из системы на странице JSP:

<a href="<c:url value="/j_spring_security_logout" />">Logout</a>

Когда я пытаюсь использовать пользовательскую страницу JSP, т. Е. Использую для этого форму входа, я получаю лучший результат, по крайней мере, он попадает на страницу входа., но другая проблема заключается в том, что вы не выходите из системы, так как вы можете просто напечатать URL-адрес, который должен быть защищен, но вы все равно пройдете мимо него.

Слегка изменены из предыдущих списков:

<http>
    <intercept-url pattern="/messageList.htm*" access="ROLE_USER,ROLE_GUEST" />
    <intercept-url pattern="/messagePost.htm*" access="ROLE_USER" />
    <intercept-url pattern="/messageDelete.htm*" access="ROLE_ADMIN" />
    <form-login login-page="/login.jsp" default-target-url="/messageList.htm"
        authentication-failure-url="/login.jsp?error=true" />
    <logout logout-success-url="/login.jsp" />
</http>
<a href="<c:url value="/login.jsp" />">Logout</a>

Спасибо за помощь

Ответы [ 6 ]

12 голосов
/ 11 июля 2011

У меня только что была эта проблема.

Вы должны убедиться, что в web.xml ваш фильтр безопасности соответствует URL-адресу / j_spring_security_logout

например

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/j_spring_security_logout</url-pattern>
</filter-mapping>
7 голосов
/ 13 марта 2015

Вы должны сделать запрос POST. Примерно так:

<form action="${logoutUrl}" method="post" id="logoutForm">
            <input type="hidden" 
                    name="${_csrf.parameterName}"
                    value="${_csrf.token}" />
</form>

<script>
    function formSubmit() {
                document.getElementById("logoutForm").submit();
    }
</script>

<c:if test="${pageContext.request.userPrincipal.name != null}">
           <h2>
                Welcome : ${pageContext.request.userPrincipal.name} | 
                 <a href="javascript:formSubmit()"> Logout</a>
            </h2>
</c:if>
5 голосов
/ 12 июля 2012

Я столкнулся с той же проблемой и, потеряв надежду, наконец-то случайно узнал ответ.Конечно, мы многому учимся, читая и используя чужие коды, и, делая это, мы наследуем настройки, о которых мало что знаем.

И это то, что случилось со мной при программировании с использованием Spring Security.

В Spring Security XML внутри тега http есть эта строка:

<logout invalidate-session="true" logout-success-url="/login" logout-url="/logout" />

Я получил эту строку в ходе своего исследования из какого-то учебника или примера.И через 2 дня, борясь с ключевым словом j_spring_security_logout и получив только ошибку 404, я понял это.

В теге logout , который я использую, есть вот это logout-url параметр установлен в "/ logout".Затем я понял, что в соответствии с моими настройками моя весна ожидает получения / logout вместо / j_spring_security_logout .

Как только я обновил свой код соответствующим образом, он работал какОчарование.

2 голосов
/ 09 декабря 2010

Знает ли ссылка на выход из системы о пути к контексту?

Например, если ваш путь к контексту - "myapp", где указанная выше ссылка указывает?

"http://localhost:8080/myapp/j_spring_security_logout" или"http://localhost:8080/j_spring_security_logout"?

На самом деле, j_spring_security_logout действителен только в контексте веб-приложения, поэтому только первая ссылка приведет к правильному URL-адресу

1 голос
/ 03 ноября 2011

У меня была такая же проблема.

Кажется, что это ошибка в 3.0.6!

Я просто понизил версию до 3.0.5 и все работаеткрасиво.

1 голос
/ 11 августа 2011

Попробуйте эту ссылку на своей странице, которая содержит ссылку для выхода из системы:

<h:outputLink value="#{request.contextPath}/logout.jsp">Logout</h:outputLink>

и создайте файл logout.jsp в папке "webcontent" со следующим кодом:

<% response.sendRedirect("/#{request.contextPath}/j_spring_security_logout"); %>

если произошла ошибка, попробуйте изменить "# {request.contextPath}" на имя вашего проекта ex: мой проект называется "security", поэтому я использую в своем файле logout.jsp:

<% response.sendRedirect("/security/j_spring_security_logout"); %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...