springMVC登录拦截器实现类、配置文件及处理ajax请求与普通请求的方法

拦截器类要继承HandlerInterceptorAdapter父类,可以选择实现preHandle()方法{进入拦截器前要做的事},或者afterCompletion()方法{进入拦截器后要做的事}

拦截器测试类:  

package com.yq.cn.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class MyInterceptor1 extends HandlerInterceptorAdapter{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		//进入时做的事情
		System.out.println("进入时做的事情11111");
		//调用下一个拦截器,如果没有,调用controller类
		return super.preHandle(request, response, handler);
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		//退出时做的事情
		System.out.println("退出时做的事情1111111111");
		super.afterCompletion(request, response, handler, ex);
	}
}

2、在springMVC.xml中配置拦截器

<mvc:interceptors>  
<mvc:interceptors>
      <mvc:interceptor>
     <mvc:mapping path="/user/*" />
          <mvc:mapping path="/index/*" />
         <!-- 
         <bean class="controller.testlongin.SecurityInterceptor" />
         <bean class="controller.testlongin.SecurityInterceptor2" />
         -->
          <bean class="controller.testlongin.SecurityInterceptor3" />
      </mvc:interceptor>
    </mvc:interceptors>

处理ajax请求和处理普通请求

public class SecurityInterceptor3 extends HandlerInterceptorAdapter {
   //处理前进行拦截
  @Override
  public boolean preHandle(HttpServletRequest request,
      HttpServletResponse response, Object handler) throws Exception {
    System.out.println("进入过滤器!");
    Object login = request.getSession().getAttribute("userName");
    if (null==login) {
       boolean isAjax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));  
       System.out.println(isAjax+"------------"+request.getHeader("X-Requested-With"));
       // 如果是ajax请求
      if (isAjax) {
        String jsonObj = "{\"success\":false,\"cause\":\"NO_LOGIN\",\"msg\":\"页面已过期,请重新登录!\"}";
            String contentType = "application/json;charset=utf-8";
            response.setContentType(contentType);
            PrintWriter out = response.getWriter();
            out.print(jsonObj);
            out.flush();
            out.close();
      } else {
        //普通请求
        String url = request.getContextPath()+"/security/tologin";
        response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            StringBuilder builder = new StringBuilder();
            builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
            builder.append("alert(\"页面过期,请重新登录\");");
            builder.append("window.top.location.href=\""+url +"\";");
            builder.append("</script>");
            out.print(builder.toString());
            out.close();
      }
      return false;
    }
    return super.preHandle(request, response, handler);
  }
}

jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div style="color:red">
		${msg }
	</div>
	<form action="${pageContext.request.contextPath }/security/login" method="get">
		用户名:<input type="text" name="userName" value=""><br/>
		密    码:<input type="password" name="password" value=""><br/>
		<input type="submit"  value="登录"><br/>
	</form>
</body>
</html>

测试:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值