Как отключить подтверждение выхода из системы в Spring Security с помощью XML? - PullRequest
3 голосов
/ 02 октября 2019

Я обновил безопасность Spring с 4.x до 5.x. Теперь у меня есть такая ситуация, когда Spring security просит пользователя подтвердить выход из системы. С сообщением

Вы уверены, что хотите выйти?

ниже приведено изображение для того же.
enter image description here

Я хочу избавиться от этого шага. Как избавиться от подтверждения выхода из системы?

Цель: Я хочу выйти из системы и перенаправить ее на страницу, откуда я пришел.

Файл security.xml:

<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                http://www.springframework.org/schema/security
                http://www.springframework.org/schema/security/spring-security-4.2.xsd">


    <http auto-config="true" use-expressions="true">
        <!-- isAnonymous() -->
        <intercept-url pattern="/**/add/**" access="isAuthenticated()" />
        <intercept-url pattern="/**/delete/**" access="isAuthenticated()" />
        <intercept-url pattern="/**/update/**" access="isAuthenticated()" />
    </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="uzer64" password="{noop}123456" authorities="ROLE_USER" />
                <user name="admin" password="{noop}admin" authorities="ROLE_ADMIN" />
            </user-service>
        </authentication-provider>
    </authentication-manager>
</beans:beans>

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Это функция CSRF, позволяющая избежать запроса на выход из системы, инициированного вредоносным javascript с другого сайта.
Ваш запрос GET: /logout, и, следовательно, Spring Security хочет подтвердить его с помощью таких действий пользователя, как щелчок.

Так что, чтобы избежать этого. Ваш запрос на выход из системы должен быть POST и содержать действительный токен _csrf.

Этого можно добиться с помощью тега весенней формы с методом post, как указано ниже

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<form:form action="${pageContext.request.contextPath}/logout" 
           method="post" modelAttribute="AnyModelAttributePassedFromController">
    <form:button value="submit"> Logout</form:button>
</form:form>
...

или

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
...
<form:form action="${pageContext.request.contextPath}/logout" 
           method="post" modelAttribute="_csrf">
    <form:button value="submit"> Logout</form:button>
</form:form>
...
0 голосов
/ 02 октября 2019

Вы можете попробовать следующее: -

    <logout
    logout-success-url="/anonymous.html"
    logout-url="/perform_logout" /> 

, и вы можете указать URL, куда вы хотите перенаправить. Вы также можете добавить delete-cookies="JSESSIONID" для удаления файлов cookie.

...