弹出安全性3.2.0.RC1中的注销不起作用

时间:2014-07-04 13:47:01

标签: java spring spring-security

我在管理页面实施注销功能时遇到了问题。 我使用"/admin/"访问我的管理页面并注销我想使用"/admin/logout"。 当我点击按钮时,我会转到"/",因为注销成功。当我回到"/admin"时,我发现我仍然登录。

我的春天xml是:

<sec:http auto-config="true">
    <sec:session-management session-fixation-protection="newSession"/>
    <sec:intercept-url pattern="/admin/**" access="ROLE_LEVEL_0" />
    <sec:http-basic />
    <sec:logout delete-cookies="JSESSIONID" logout-success-url="/" logout-url="/admin/logout"/>
</sec:http>

<sec:authentication-manager alias="authenticationManager" erase-credentials="true">
    <sec:authentication-provider user-service-ref="userDetailsService">
       <sec:password-encoder hash="md5"/> 
    </sec:authentication-provider>
</sec:authentication-manager>

<bean id="userDetailsService" class="com.adminsecurity.acegi.userdetails.jdbc.JdbcUserDetailsManager">
    <constructor-arg index="0" ref="dataSource"/>
    <property name="changePasswordSql" value="update users set password = ? where username = ?"/>
</bean>

我的JSP是这样的:

<c:url var="logoutUrl" value="/admin/logout"/>
<form action="${logoutUrl}"
      method="get">
    <input type="submit"
           value="Log out" />
</form>

1 个答案:

答案 0 :(得分:0)

解决此问题的唯一方法是不使用<sec:http-basic />并选择使用表单登录选项。 否则,浏览器将在每个请求中发送凭据,您将无法注销。有几种解决方法,但没有一种可用于每个浏览器。