Вызов j_spring_security_logout не работает
Я пытаюсь настроить logut моего приложения с помощью 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/my application, а страницы входа и выхода находятся в 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>
И вот мой spring -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>
Спасибо заранее.
Ответы
Ответ 1
logout-url ссылается на виртуальный URL-адрес, у вас нет никакого ресурса по этому имени. Вы можете сделать это:
<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.
Ответ 2
проверить, включен ли csrf. Если csrf включен, необходимо использовать метод post для выхода из системы, добавьте токен csrf в скрытое поле. затем используйте JavaScript, чтобы опубликовать форму для выхода из системы
Ответ 3
С spring безопасность 4 Выход из системы должен выполняться с помощью кнопки формы. Значок CSRF должен быть отправлен вместе. j_spring_security_logout больше не работает. Проведя однажды, я получил следующее, чтобы работать.
Шаг 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>
Шаг 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>
Шаг 3 В вашем контроллере входа
//Logout mapping
@RequestMapping("/logout")
public String showLoggedout(){
return "logout";
}
Шаг 4 У вас должен быть один logout.jsp
Важно, чтобы он выходил на страницу входа после выхода из системы.
<security:form-login login-page="/login" authentication-failure-url="/login?error=true" />
Итак, эта страница входа должна быть там с соответствующим отображением для login.jsp или любого другого, чтобы отобразить в вашем контроллере.
Ответ 4
также понимает, как должен выглядеть ваш контроллер
@RequestMapping("/logout")
public String logoutUrl(){
return "logout";
}
Ответ 5
сначала установите security-context.xml следующий код...
<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>
Ответ 6
В конфигурации JAVA-BASED Spring MVC вы должны настроить его в своем классе конфигурации безопасности:
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.servletApi().rolePrefix("");
http
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
}
Этот ответ удваивается и работает над моим делом:
Spring Безопасность Java Config не генерирует URL выхода из системы