日期:2014-05-17  浏览次数:20687 次

struts2拦截器实现登陆验证问题
拦截器如下
struts.xml:
<package name="test" namespace="/test" extends="json-default">

<interceptors>
<interceptor name="loginInterceptor" class="com.test.IsLogin"></interceptor>
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="loginInterceptor"/>
</interceptor-stack> 
</interceptors>  
  <!-- 定义在该ACTION包下默认要使用的拦截器栈 -->
  <default-interceptor-ref name="mystack"/>
<!-- 定义全局转向 -->
<global-results>
<result name="input" type="redirect">/nopermission.jsp</result>
</global-results>

<action name="search" method="Search" class="test.web.SearchAction">
<result type="json"></result>
</action>

  </package>

拦截器IsLogin:
public String intercept(ActionInvocation invocation) throws Exception{
ActionContext context = ActionContext.getContext();
boolean flg = SessionUtil.isSessionValid();
if (!flg)//未登陆
  {
  return "input";
}
  else{
  return invocation.invoke();
  }
}

当session过期时,执行到了return "input",但是页面没有跳转。本人前台用的是query的请求,估计是jquery的关系导致页面不能跳转,求大牛指点如何才能在实现跳转?

------解决方案--------------------
当struts2接收到一个没有权限的请求后,先判断下该请求是不是ajax请求,(X-Requested-With或者其它的都行)
如果不是,就直接返回登陆页面,如果是,就返回一个字符串(json/xml...),告诉浏览器端需要登陆,
然后通过JS把用户引到登陆页面、或者弹出登陆框等
------解决方案--------------------
如果是ajax方式调用action,因为ajax是异步提交,局部刷新,所以对整个页面来说是不会跳转的。
要跳转还是需要用平常的表单提交的方式。