Spring Безопасность: Как сделать reset SPRING_SECURITY_LAST_EXCEPTION.message?

Я могу отобразить SPRING_SECURITY_LAST_EXCEPTION.message ( "Bad Credentials" ), когда пользователь пытается выполнить вход с неправильными учетными данными.

Мой логин jsp в настоящее время использует следующий код:

<c:if test="${not empty SPRING_SECURITY_LAST_EXCEPTION.message}">
    <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" />
</c:if>

Моя проблема в том, что сообщение "Плохие учетные данные" все еще существует, когда пользователь переходит от страницы входа в систему и затем возвращается.

Как я могу reset SPRING_SECURITY_LAST_EXCEPTION.message, когда пользователь обновляет страницу входа?

Ответ 1

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

<form-login ... authentication-failure-url = "/login?error=1" />

и отобразить сообщение об ошибке как

<c:if test="${not empty param['error']}"> 
    <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" /> 
</c:if> 

Однако, поскольку SPRING_SECURITY_LAST_EXCEPTION является атрибутом сеанса, я думаю, вы можете reset его использовать следующий подход:

<c:remove var = "SPRING_SECURITY_LAST_EXCEPTION" scope = "session" />