ssm拦截器的实现(登录拦截功能实现案例)——小马同学@Tian

ssm中的拦截器

1.1 拦截器作用

通过拦截器可以对SpringMVC的请求进行拦截处理,用户可以自定义拦截器来实现特定的功能

1.2 自定义拦截器

1.2.1 实现解析
实现HandlerInterceptor接口
preHandle:预处理回调方法,实现处理器的预处理(如登录检查),
返回值:true表示继续流程(如调用下一个拦截器或处理器);
 false表示流程中断(如登录检查失败),不会继续调用其他的拦截器或处理器,此时我们需要通过response来产生响应;
postHandle:后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)对模型数据进行处理或对视图进行处理,modelAndView也可能为null。
afterCompletion:整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理
1.2.2 实现类代码(登录功能供参考)
public class CommonInterceptor implements HandlerInterceptor{
  @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.setCharacterEncoding("utf-8");
        String requestURI = request.getRequestURI();//   /user/query.do
        System.out.println(requestURI);
        //URI 统一资源标识符
        //url  统一资源定位符
        User user = (User)request.getSession().getAttribute("user");
        if (user == null) {
            String value = request.getHeader("X-Requested-With");
            if (value != null && value.equals("XMLHttpRequest")) {
                response.getWriter().write("{\"code\":0, \"info\":\"未登录\"}");
            } else {
                //非ajax请求的时候条撞到login.html
                response.sendRedirect(request.getContextPath() + "/login.html");
            }


            return false;
        }
        return true;
    }
}
1.2.3 spring-mvc.xml中的配置
<!-- 拦截器相关配置 -->
	<mvc:interceptors>    
	    <mvc:interceptor>    
	        <!-- 匹配的是url路径, 如果不配置或/**,将拦截所有的请求,如果web.xml中配置了/,拦截的资源包括Controller、静态资源等 -->  
	        <mvc:mapping path="/**" />   
	        <!-- 排除某些不需要拦截的资源 --> 
	        <mvc:exclude-mapping path="/js/**"/>
	        <!-- <mvc:exclude-mapping path="/login.html"/> -->
	        <!-- 指定自定义拦截器 -->
	        <bean class="com.rr.interceptor.CommonInterceptor"></bean>    
	    </mvc:interceptor>  
	</mvc:interceptors>
	~~~

版权声明:本文为SigleDog原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。