springmvc拦截器

时间:2019-06-17
本文章向大家介绍springmvc拦截器,主要包括springmvc拦截器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理。

比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间。

配置步骤:

1、实现org.springframework.web.servlet.HandlerInterceptor接口,自定义拦截器(处理被拦截请求)。

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import cn.zj.ssm.pojo.User;
public class CheckLoginInterceptor implements HandlerInterceptor {
    /*
     * 控制器方法执行之前执行
     * 返回结果为true表示放行,如果返回为false,表示拦截(可以做权限拦截,登录检查拦截).
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        //1.获取sesison中共享的user对象
        User user = (User) request.getSession().getAttribute("user");
        if(user ==null) {
             //使用重定向跳转到登录页面 login.jsp
            response.sendRedirect(request.getContextPath()+"/login.jsp");
            //不放行
            return false;
        }
        //放行
        return true;
    
    }
    /*
     * 控制器方法执行后,视图渲染之前执行(可以加入统一的响应信息).
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
    }
    /*
     * 视图渲染之后执行(处理Controller异常信息,记录操作日志,清理资源等)
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub
        
    }

}

2、在springmvc配置文件中配置拦截器

<mvc:interceptors>
            <!--配置检查登录拦截器  -->
            <mvc:interceptor>
                
                <!-- 配置拦截的规则
                    只会拦截 控制器请求,不会拦截jsp页面
                    /*  
                        只能拦截一级 如 : /list.do /delete.do
                        如:/user/list.do , /user/delete.do 二级 不能拦截
                    /** 
                        可以拦截多级 无论几级都可以 如  /a/b/c/d/list.do
                 -->
                <mvc:mapping path="/**"/>
                
                <!-- 排除拦截的地址,多个地址使用逗号隔开
                    /user/login.do
                    
                    
                 -->
                <mvc:exclude-mapping path="/user/login.do"/>
            
                <!-- 拦截器的类型 -->
                <bean class="cn.zj.ssm.interceptor.CheckLoginInterceptor"/>
            
            </mvc:interceptor>
        </mvc:interceptors>

原文地址:https://www.cnblogs.com/cdeelen/p/11042003.html