Spring security 弹簧安全注销返回按钮
spring security是否有办法防止下面最后一点?我用的是3.0.5 -用户登录到我的网站 -用户转到网站中的任何页面并单击“注销” -注销链接会使用户会话无效,并将其发送到我的网站的登录页面 -在同一个浏览器中,用户导航到新网站(比如cnn.com) -用户点击后退按钮,他们在我的登录页面登陆 -用户再次点击“后退”按钮,它们会出现在应用程序中可能包含我们不希望出现的数据的页面上。如果他们点击页面上的任何链接,他们会立即被发送到登录页面,但他们可以从浏览器缓存中查看缓存页面…有没有办法不让他们查看Spring security 弹簧安全注销返回按钮,spring-security,Spring Security,spring security是否有办法防止下面最后一点?我用的是3.0.5 -用户登录到我的网站 -用户转到网站中的任何页面并单击“注销” -注销链接会使用户会话无效,并将其发送到我的网站的登录页面 -在同一个浏览器中,用户导航到新网站(比如cnn.com) -用户点击后退按钮,他们在我的登录页面登陆 -用户再次点击“后退”按钮,它们会出现在应用程序中可能包含我们不希望出现的数据的页面上。如果他们点击页面上的任何链接,他们会立即被发送到登录页面,但他们可以从浏览器缓存中查看缓存页面…有没有办法
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans
xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
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/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="dc" />
<global-method-security />
<http access-denied-page="/auth/denied.html">
<intercept-url filters="none" pattern="/javax.faces.resource/**" />
<intercept-url filters="none" pattern="/services/rest-api/1.0/**" />
<intercept-url filters="none" pattern="/preregistered/*"/>
<intercept-url
pattern="/**/*.xhtml"
access="ROLE_NONE_GETS_ACCESS" />
<intercept-url
pattern="/auth/*"
access="ROLE_ANONYMOUS,ROLE_USER"/>
<intercept-url
pattern="/preregistered/*"
access="ROLE_ANONYMOUS,ROLE_USER"/>
<intercept-url
pattern="/registered/*"
access="ROLE_USER"
requires-channel="http"/>
<form-login
login-processing-url="/j_spring_security_check.html"
login-page="/auth/login.html"
default-target-url="/registered/home.html"
authentication-failure-url="/auth/login.html" />
<logout invalidate-session="true"
logout-url="/auth/logout.html"
success-handler-ref="DCLogoutSuccessHandler"/>
<anonymous username="guest" granted-authority="ROLE_ANONYMOUS"/>
<custom-filter after="FORM_LOGIN_FILTER" ref="xmlAuthenticationFilter" />
<session-management session-fixation-protection="none"/>
</http>
<!-- Configure the authentication provider -->
<authentication-manager alias="am">
<authentication-provider user-service-ref="userManager">
<password-encoder ref="passwordEncoder" />
</authentication-provider>
<authentication-provider ref="xmlAuthenticationProvider" />
</authentication-manager>
</beans:beans>
下面的筛选器处理了我的情况:
package com.dc.api.service.impl;
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;
public class CacheControlFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse resp = (HttpServletResponse) response;
resp.setHeader("Expires", "Tue, 03 Jul 2001 06:00:00 GMT");
resp.setHeader("Last-Modified", new Date().toString());
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
resp.setHeader("Pragma", "no-cache");
chain.doFilter(request, response);
}
@Override
public void destroy() {}
@Override
public void init(FilterConfig arg0) throws ServletException {}
}
春季3.0.x
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="cacheSeconds" value="0" />
</bean>
春季2.5.x
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="cacheSeconds" value="0" />
</bean>
如果您和我一样,在使用c12的缓存过滤器后无法使其工作,并且您正在使用
请确保不再需要自动配置=“true”
部件。它(看起来像)添加了http基本身份验证,它不处理通过协议注销的问题!这导致您可以获取注销URL,但点击“上一步”按钮只会将您带回来,因为您尚未真正注销。要解决此问题,您必须在安全xml配置文件中添加:
<security:http auto-config="true" use-expressions="true">
<security:headers >
<security:cache-control />
<security:hsts/>
</security:headers>
是的,我使用了SpringSecurity3.2.9.RELEASE,并简单地在一个spring配置文件中提供了
,如上面的文章所示
<security:http
auto-config="true" use-expressions="true">
<security:headers />
</security:http>
因此,用户将无法访问其他应用程序页面
注销后使用浏览器后退和前进按钮。什么是“resp.setHeader(“Expires”,“Tue,2001年7月3日星期二06:00:00 GMT”);”?为什么您使用相同的解决方案指定了2001?嗯,但是过滤器不适用于/j_spring_security_注销。想法?这会有帮助:这很好用。但是,文档中说“我们建议您避免使用它,而是显式地配置所需的服务。”对此有何想法?