Struts2 拦截器处理同步(普通Http)请求和异步(post,ajax)请求时拦截配置

执行页面的post请求时,无法正常跳转到登录页面,经过调研,发现是拦截器的处理问题,拦截器只对方法进行拦截,没有考虑post回调函数才导致出现上述Bug。
下面是解决办法:
首先,优化拦截器:
/**
 * 用户登入校验登入
 * @author Administrator
 *
 */


//可以对请求方法
public class LoginInterceptor extends MethodFilterInterceptor {
//序列号
private static final long serialVersionUID = 1307687631270550421L;
@Override
public String doIntercept(ActionInvocation invocation) throws Exception {
Map<String,Object> session=ActionContext.getContext().getSession();
//取到session的封装对象
Object obj=session.get(SessionAttributeKey.LOGIN_USER);
if(obj==null){
//打印对象
System.out.println("对象"+obj);
//获取request域中信息  
       HttpServletRequest req = ServletActionContext.getRequest();  
      //获得当前请求地址
       String url = req.getServletPath();  
       //获得请求类型  
       String type = req.getHeader("X-Requested-With");
       //判断是否是同步请求或者是异步请求
       if(type.equalsIgnoreCase("XMLHttpRequest")){
        //存放url地址
        System.out.println(url);
        session.put(SessionAttributeKey.XIAOMI_URL, "url");
        JsonObject<Object> jsonObject=new JsonObject<Object>();
        jsonObject.setObject(obj);
        return null;
       }else{
session.put(SessionAttributeKey.ERROR_MSG, "请登入后再进行操作!!!!");
return "login";
       }
}
return invocation.invoke();//invocation.invoke() 就是通知struts2接着干下面的事情;返回验证通过
}
}

前台js代码:
function publish1(){
var comCont=$.trim($("#text1").val());
var artId=$.trim($("#artId").val());
var usersId=$.trim($("#usersId").val());
var str="";
//发送post请求
$.post("front/artcomment_addArtComment.action",{comCont:comCont,artId:artId,usersId:usersId},function(data){
//判断回调函数值
if(data=='' || data==undefined || data==null){
if(window.confirm('您尚未登录,请登录后再发表评论!')){
window.location.href = 'front/login.jsp';
}
}else{
var artcomments=data.object.artcomments;
for(var i=0;i<artcomments.length;i++){
str+="<li>";
str+="<div class='reply_list_img'><img src='front/images/reply_list_img1.jpg'></div>";
str+="<div class='reply_list_con'><div class='user_info'><a>"+artcomments[i].usersName+"</a> <span>发布于</span><span>"+artcomments[i].comDate+"</span><span id='reply_floor'></span></div><div class='main_con'>"+artcomments[i].comCont+"</div></div>";
str+="</div>";
}
$("#reply_list").html(str);
}
});
}
struts.xml文件配置:
<package name="xmFront" namespace="/front" extends="json-default">
<!--拦截器  -->
<interceptors>
<interceptor name="loginInterceptor" class="com.xiaomi.web.interceptor.LoginInterceptor"/>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="loginInterceptor">
<param name="includeMethods">addArtComment</param><!-- 要过滤的请求方法 -->
</interceptor-ref>
</interceptor-stack>
</interceptors>

<global-results>
<result name="login" type="redirect">/front/login.jsp</result>
</global-results>

<action name="*_*" class="{1}Action" method="{2}">
<interceptor-ref name="myStack"/>
<result type="json">
<param name="root">jsonObject</param>
</result>
</action>
</package>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值