Day25 SpringMVC interceptor case***

case study

Some functions of the project must be logged in to access.
If you are not logged in, you will be redirected to the login page to visit the order, address and other pages.
Insert picture description here

Case realization

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>

Test 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";
    }
}

Guess you like

Origin blog.csdn.net/qq_43639081/article/details/109197028