SPRING_SECURITY_LAST_EXCEPTION消息永不消失

时间:2017-02-17 10:03:09

标签: spring spring-security

如果登录无效,我显示登录失败错误,但即使刷新页面,错误也不会消失。

<c:if test="${not empty SPRING_SECURITY_LAST_EXCEPTION}">          
    <font color="red">
        Invalid username or password. Did you forget your password?
         <a href="#">I forgot</a>
    </font>
</c:if>

是否有其他方式可以显示登录失败的时间,或者我如何修复刷新页面或转到其他页面后不会显示此错误消息?

Spring-security.xml:

<security:http  auto-config="false" use-expressions="true">
<security:intercept-url pattern="/profile" access="hasRole('ROLE_USER')"/>
<security:form-login
login-page="/clogin"
authentication-failure-url="/clogin?error=1"
default-target-url="/profile"
username-parameter="username"
/>
<security:logout logout-success-url="/logout" invalidate-session="true" delete-cookies="true" />

<security:csrf />
</security:http>

1 个答案:

答案 0 :(得分:2)

您没有检查是否存在来自故障网址的特殊参数。在您的情况下,在您的登录页面中输入一些值后,${not empty SPRING_SECURITY_LAST_EXCEPTION}并不总是为空。

试试这个:

<c:if test="${param.auth eq 'failure'}">
      <div class="error">
         <font color="red">
        <c:out value="Username or password that you entered is invalid." /> . 
</font>
      </div>
</c:if>

并在spring-security.xml

中将您的失败网址设置为/clogin?auth=failure

param.auth表示失败网址中的auth参数。 eq表示平等。因此,如果auth参数等于failure来自=failure来自网址,请首先检查对帐单。