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是异步提交,局部刷新,所以对整个页面来说是不会跳转的。
要跳转还是需要用平常的表单提交的方式。