Java 避免在struts 2中的浏览器中前后移动

Java 避免在struts 2中的浏览器中前后移动,java,struts2,Java,Struts2,会话到期后,我将当前页面移动到登录页面。如果用户单击浏览器中的后退或前进按钮,它将重定向到上一页,而不是显示登录页。我尝试使用拦截器使会话过期并避免缓存存储,但页面仍然会移动到上一页而不是登录。我的代码如下: myInterceptor.java Struts.xml 谁能建议我如何解决这个问题 浏览器通常不会重新加载页面,当您后退/前进时,它们只显示以前缓存的html代码。我不确定,你是否能对此做些什么。@libik是的,他们不会重新加载以删除缓存。我写了这三行来停止缓存html,但它失败了。

会话到期后,我将当前页面移动到登录页面。如果用户单击浏览器中的后退或前进按钮,它将重定向到上一页,而不是显示登录页。我尝试使用拦截器使会话过期并避免缓存存储,但页面仍然会移动到上一页而不是登录。我的代码如下:

myInterceptor.java

Struts.xml


谁能建议我如何解决这个问题

浏览器通常不会重新加载页面,当您后退/前进时,它们只显示以前缓存的html代码。我不确定,你是否能对此做些什么。@libik是的,他们不会重新加载以删除缓存。我写了这三行来停止缓存html,但它失败了。在丢失会话之前,你必须将这些标题添加到所有响应中,此截取仅在被截取时添加,对吗?但为时已晚,因为浏览器无法重新加载以查找,他应该重新加载:。
public class myInterceptor extends AbstractInterceptor {

   private static final long serialVersionUID= 1L;
   @Override

   public String intercept(ActionInvocation ai) throws Exception {

      final ActionContext context = ai.getInvocationContext();
      HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE);
      if(response!=null){
         response.setHeader("Cache-control", "no-cache, no-store");
         response.setHeader("Pragma","no-cache");
         response.setHeader("Expires", "-1");
      }
      return ai.invoke();
   }
}
<package name="default" namespace="/" extends="struts-default,json-default">
  <interceptors>
       <interceptor name="myInterceptor"  class="com.webapp.myInterceptor"/>
       <interceptor-stack name="defaultinterStack">
             <interceptor-ref name="defaultStack"/>
             <interceptor-ref name="myInterceptor"/>
       </interceptor-stack>
  </interceptors>
<default-interceptor-ref name="defaultinterStack"/>

<action name="home" class="com.webapp.Action" method="home" > 
     <result name="success">/start.jsp</result>
     <result name="error">/error.jsp</result>
</action>

</package>