Вопрос по logout, spring, security – Вызов j_spring_security_logout не работает

20

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

Я вызываю функцию следующим образом:

<a href="<c:url value="/j_spring_security_logout"/>"><img border="0" id="logout" src="./img/logout.png" /></a>

У меня есть в WebContent / jsp / главная страница моего приложения, а страницы входа и выхода находятся в WebContent / login /.

Я также проверил этот другой постПроблема с выходом из системы безопасности Spring но решение, данное там, не работает для меня.

Здесь вы можете увидеть мой web.xml

<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>/*</url-pattern>
</filter-mapping>

И вот моя весна-security.xml

<http auto-config="true">
    <intercept-url pattern="/*" access="ROLE_USER" />
    <form-login login-page="/login/login.jsp" 
                authentication-failure-url="/login/errorLogin.jsp"/>
    <logout logout-success-url="/" logout-url="/login/logout.jsp" />
</http>

<beans:bean id="myAuthenticationProvider" 
    class="myapp.web.authentication.WSAuthenticationProvider">
</beans:bean>

<authentication-manager>
    <authentication-provider ref="myAuthenticationProvider"/>
</authentication-manager>

Заранее спасибо.

Ваш Ответ

6   ответов
0

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

затем добавьте этот код в ваш файл JSP ..

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


<c:url var="logoutUrl" value="/logout" />        
  <a href="javascript:formSubmit()"> Logout</a>
</li>

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

ассе конфигурации безопасности:

@Override
protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    http.servletApi().rolePrefix("");
    http
      .logout()
          .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}

Этот ответ удвоен и работает над моим делом: Spring Security Java Config не генерирует URL выхода

0

@RequestMapping("/logout")
    public String logoutUrl(){
        return "logout";
    }
33

вам не нужно иметь какой-либо ресурс с таким именем. Вы можете сделать это:

<logout logout-success-url="/" logout-url="/j_spring_security_logout" />

и ссылка на вашей странице, как это

<c:url value="/j_spring_security_logout" var="logoutUrl" />
<a href="${logoutUrl}">Log Out</a>

Или это:

<logout logout-success-url="/" logout-url="/logout" />

и ссылка следующая:

<c:url value="/logout" var="logoutUrl" />
<a href="${logoutUrl}">Log Out</a>

Вы смешивали обе причины, по которым вы получили ошибку 404.

В конфигурации Java вы устанавливаетеlogoutUrl() вSecurityConfig.java, Но в остальном +1. Это помогло.
17

spring security 4 Выход должен быть сделан через кнопку формы. Токен CSRF должен быть отправлен вместе.j_spring_security_logout больше не работает. Потратив один день, я стал работать.
Step 1: На вашей странице JSP

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}" method="post">
    <input type="submit" value="Logout"/>
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>

Step 2

<security:http use-expressions="true">
<security:form-login login-page="/login" authentication-failure-url="/login?error=true" />
<security:logout logout-success-url="/login" invalidate-session="true" logout-url="/logout" />
</security:http>

Step 3 В вашем контроллере входа

//Logout mapping
@RequestMapping("/logout")
public String showLoggedout(){
    return "logout";
}

Step 4 У вас должен быть один logout.jsp

Важно видеть, что после выхода из системы он попадет на страницу входа.

<security:form-login login-page="/login" authentication-failure-url="/login?error=true" />

Таким образом, эта страница входа должна быть там с соответствующим отображением в login.jsp или что-то еще для сопоставления в вашем контроллере.

Спасибо человек, работает как шарм!
27

включен ли csrf. Если csrf включен, необходимо использовать метод post для выхода из системы, добавьте токен csrf в качестве скрытого поля. затем используйте JavaScript, чтобы опубликовать форму для выхода

привет, я сделал как javascript и передал токен csrf, но я не могу войти снова после выхода из системы .. после выхода из системы моя страница входа в систему отображается с некоторым токеном csrf, который отличается от того, когда я перезагружаю страницу входа, и не могу войдите снова, это говоритhttp://192.168.6.51:8044/EWTS/auth/login_check;jsessionid=403A583CDDC688292408C7C76CD09F2D?targetUrl= не найдено
Вау, это сэкономило мне кучу времени! Спасибо!

Похожие вопросы