springmvc ajax 登录拦截

来源:互联网 发布:python字符串的长度 编辑:程序博客网 时间:2024/06/03 09:51

拦截器:多个请求需要统一的处理。

前台发起请求:

$.ajax({type:"post",beforeSend:function(){loading("请稍后,数据提交中...");},url:"/comment/save/",success:function(data){if(data=="success"){$(obj).text("提交").attr("onclick","tm_saveComment(this)");}else if(data=="fail"){alert("保存失败!!!");}else if(data=="logout"){window.location.herf="/login";}}});
后台:

定义一个拦截器

public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {//获取会话里面登陆的用户信息String username = (String) request.getSession().getAttribute("username");String requestType = request.getHeader("X-Requested-With");//识别ajax的响应头if(username==null){if (requestType != null && requestType.equals("XMLHttpRequest")) {//如果是ajax类型,响应logout给前台response.getWriter().print("logout");}else{response.sendRedirect("/login");//首页居多}return false;//终止后面的拦截器的执行}else{return true;//让下一个拦截器去处理}}
xml中注册拦截器

 <mvc:interceptors>     <mvc:interceptor>     <mvc:mapping path="/center/**"/>     <mvc:mapping path="/comment/**"/>     <mvc:mapping path="/period/**"/>       <mvc:mapping path="/music/**"/>          <bean class="com.core.interceptor.LoginInterceptor" />     </mvc:interceptor>      </mvc:interceptors>
如果拦截器中没有设置识别ajax的响应头,这返回的数据就是页面的内容的源代码而不会是重定向到登录页面。

防止重复提交

<span class="fr"><a href="javascript:void(0);" id="submitcomment" data-pid="${period.id}" onclick="tm_saveComment(this,event)" class="btn">发布</a></span>

$(obj).text("提交中...").removeAttr("onclick");
$.ajax({type:"post",data:{"content":message},beforeSend:function(){loading("请稍后,数据提交中...");},error:function(){loading("remove",1);$(obj).text("提交").attr("onclick","tm_saveComment(this)");},url:"/comment/save/"+periodId,success:function(data){if(data=="success"){$(obj).text("提交").attr("onclick","tm_saveComment(this)");//绑定提交事件loading("添加成功",1);





0 0