springmvc-front.xml

    <!-- 方法注解 映射器 -->

    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <!-- 拦截器 -->
        <property name="interceptors">
            <list>
                <bean class="cn.zhou.common.web.SpringmvcInterceptor">
                <!--adminId 配置是为了开发人员使用的权限  -->
                    <property name="adminId" value="1"/> 
                </bean>
            </list>
        </property>
    </bean>

拦截器类

private SessionProvider sessionProvider;

    private Integer adminId;//管理员,给开发人员用,默认注入adminId=1
    //常量 拦截路径规则
    private static final String INTERCEPTOR_URL = "/buyer/";
    //方法前   /buyer/
    //对请求路径 http://localhost:8080/buyer/index.shtml ---- /buyer/ 所请求的方法进行拦截,如果用户没有登录,
    //不执行后面的方法,如果用户有登录,执行后面的方法
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
        // TODO Auto-generated method stub
        if(adminId != null){//开发阶段不走正常流程,默认拦截器返回都是true,不走拦截url代码
            Buyer buyer = new Buyer();
            buyer.setUsername("5201314");
            sessionProvider.setAttribute(request, Constans.BUYER_SESSION, buyer,response);

        }else{
            //获取用户是否登录
            Buyer buyer = (Buyer) sessionProvider.getAttribute(request, Constans.BUYER_SESSION,response);
            boolean flag = false;//传给页面,是否隐藏登录
            if(null != buyer){//用户登录的情况
                flag = true;
            }
            request.setAttribute("isLogin", flag);
            //请求路径   http://localhost:8080/buyer/index.shtml
            //getRequestURL()==http://localhost:8080/buyer/index.shtml
            // getRequestURI()== /buyer/index.shtml
            String requestURI = request.getRequestURI();
            //不是以 INTERCEPTOR_URL为开头的方法都放过,是这开头的,但是用户登录了都放过
            if(requestURI.startsWith(INTERCEPTOR_URL)){
                //必须登陆
                if(null == buyer){
                    response.sendRedirect("/shopping/login.shtml?returnUrl=" + request.getParameter("returnUrl"));
                    return false;//用户没有登录,方法就不走了,调回登录页面让用户登录
                }
            }
        }
        return true;
    }

流程图
这里写图片描述

posted on 2017-04-18 15:34  2637282556  阅读(123)  评论(0编辑  收藏  举报