SpringMVC--07拦截器

一、通过实现HandlerInterceptor接口来定义拦截器

1、通过实现HandlerInterceptor接口来定义拦截器:
public class MyInterceptor implements HandlerInterceptor{
// 处理请求方法前先执行该方法,如果返回false则不执行后续的拦截器
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("处理前" + request.getRequestURI());
        return true;
    }

    // 处理请求方法执行后执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        System.out.println("处理后");
    }

    // 在DispatcherServlet执行后执行,主要做一些清理工作。。。Springmvc的对象是单例的
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println("最最后");
    }
}
2、定义Springmvc文件

不要忘记添加:
xmlns:mvc="http://www.springframework.org/schema/mvc"在配置文件头


    
        
            
            
            
        
    

如果被拦截了,可以在prepreHandle通过ServletAPI进行转发或者重定向。

二、实现登录拦截

1、添加登录界面:

    
姓名:
密码:
2、实现登录处理器:
@Controller
public class LoginController {
    @RequestMapping("/logon")
    public String login(User user, HttpSession session) {
        if ("winney".equals(user.getUname()) && "1234".equals(user.getPwd())) {
            session.setAttribute("user", user);
            return "/index";
        }
        return "/login";
    }
}

3、实现拦截器

这里在拦截器里面添加一个allowPass属性,用于设置哪些url是可以直接通过,不拦截的。

private List allowPass;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        String url = request.getRequestURL().toString();
        Object user = request.getSession().getAttribute("user");
        if (user != null) {
            return true;
        }
        for (String temp : allowPass) {
            if (url.endsWith(temp)) {
                return true;
            }
        }
        request.getRequestDispatcher("/login.jsp").forward(request, response);
        return false;
    }

4、在配置文件里面配置拦截器
注意:这里给拦截器里面的allowPass属性注入了初始值。所以在allowPass是必须生成getter和setter方法的。


            
            
            
                
                    
                        /logon.do
                    
                
            
        

你可能感兴趣的:(SpringMVC--07拦截器)