Java 拦截器小记

拦截器的概念

java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action
执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截
然后再之前或者之后加入某些操作。目前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不用深究,知道即可。

和过滤器相似,继承HandlerInterceptor接口,重构preHandler方法

public class LoginInterceptor implements HandlerInterceptor {
    
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    
        //在执行前进行拦截,若拦截成功,返回true
        //1.获取session
        HttpSession session = request.getSession();
        //获取登录url。这个url是不进行拦截的

        String url = request.getRequestURI();

//        if (session.getAttribute("userInfo")!=null||url.indexOf("userInfoController/doLogin.do")!=-1){
    
    
        //登陆成功,不拦截。
        if (session.getAttribute("userInfo")!=null){
    
    
            return true;
        }else {
    
    
            //拦截后重新返回登录界面
            response.sendRedirect(request.getContextPath()+"/userInfoController/doLogin.do");
            return false;
        }
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
    
        //在处理过程中进行拦截
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
    
        //执行完毕,再返回前拦截

    }
}

拦截器是在Spring层中实现的,所以配置也要在Spring配置文件中加入

 <mvc:interceptors>
        <mvc:interceptor>
            <!--拦截所有的mvc控制器-->
            <mvc:mapping path="/**"/>
            <!--放行login.do-->
            <mvc:exclude-mapping path="/userInfoController/doLogin.do"/>
            <!--告诉使用哪一个拦截器-->
            <bean class="com.zrgj.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

猜你喜欢

转载自blog.csdn.net/hzl529/article/details/102667832
今日推荐