Day25 SpringMVC拦截器案例***

案例分析

项目的某些功能,必须登录才能访问。
没有登录的前提下,去访问订单、地址等页面都跳转到登录页面。
在这里插入图片描述

案例实现

LoginInterceptor

//拦截器使用第一步:实现一个接口HandlerInterceptor
//判断一下路径,如果访问的路径是order或address,判断是否登录,未登录就强制转到登录界面
public class LoginInterceptor implements HandlerInterceptor {
    
    

    @Override
    //true表示放行,不拦截
    //false表示不放行,拦截
    //Controller方法调用之前执行
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        System.out.println("LoginInterceptor preHandle------------------------");
        User user = (User) request.getSession().getAttribute("user");
        if (user==null){
    
    
            //request.getRequestURI() 返回除去host(域名或者ip)部分的路径
            String address = request.getRequestURI();
            System.out.println("address="+address);
            if (address.contains("order")||address.contains("address")){
    
    
                //request.getContextPath() 返回工程名部分,如果工程映射为/,此处返回则为空
                String contextPath = request.getContextPath();
                //强制到登录界面
                response.sendRedirect(contextPath+"/login.jsp");
                return false;
            }
        }
        return true;
    }

    //Controller方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
    
        System.out.println("LoginInterceptor postHandle------------------------");
    }

    //在DispatcherServlet 渲染了对应的视图之后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    
        System.out.println("LoginInterceptor afterCompletion------------------------");
    }
}

springmvc.xml

    <!--拦截器使用第二步:配置拦截器-->
    <mvc:interceptors>
        <!--用于测试的拦截器-->
        <mvc:interceptor>
            <!--拦截路径的配置-->
            <mvc:mapping path="/**"/>
            <bean id="interceptor1" class="com.wzx.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

UserController

@Controller
public class UserController {
    
    
    @RequestMapping("login.action")
    public ModelAndView login(User user, HttpSession session){
    
    
        ModelAndView mv= new ModelAndView();
        if ("jack".equals(user.getUsername())&&"1234".equals(user.getPassword())){
    
    
            session.setAttribute("user",user);
            mv.setViewName("success");
            return mv;
        }
        mv.setViewName("fail");
        return mv;
    }
}

success.jsp

<a href="${pageContext.request.contextPath}/order/query.action">查看我的订单</a>

测试OrderController

@Controller
@RequestMapping("/order")
public class OrderController {
    
    
    @RequestMapping(path = "/query.action",method = {
    
    RequestMethod.GET,RequestMethod.POST})
    public String query(Integer id){
    
    
        System.out.println("你访问了我的订单功能 ");
        return "order";
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43639081/article/details/109197028