zoukankan      html  css  js  c++  java
  • 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>
    
    
  • 相关阅读:
    命令模式
    js代理模式,处理缓存
    js设计模式之策略模式
    查看并修改签名证书keystore的密码,alias别名等相关参数
    【fiddler】配置代理后个别app连不上网的问题
    使用Fiddler域名过滤、断点、小技巧绕过前端验证
    App上架各大应用市场的地址及操作方法
    获取APK获取APK证书MD5、SHA1、SHA256等秘钥
    Python一切皆对象
    WEB基础之布局与定位
  • 原文地址:https://www.cnblogs.com/cdeelen/p/11042003.html
Copyright © 2011-2022 走看看