天天看点

SpringMVC 如何使用拦截器 - HandlerInterceptorSpringMVC 如何使用拦截器 - HandlerInterceptor

SpringMVC 如何使用拦截器 - HandlerInterceptor

拦截器分为两种:

1.实现HandlerInterceptor接口

2.继承HandlerInterceptorAdapter类

我这里讲第一种!!!!

拦截器java文件

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.comit.socket.dto.Manufacturer;
import com.comit.socket.dto.UserRole;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;


@Component
public class LoginInterceptor implements HandlerInterceptor {

    private List<String> exceptUrls;


    //该方法在action执行前执行,可以实现对数据的预处理,
    // 比如:编码、安全控制等。如果方法返回true,则继续执行action。
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //System.out.println("LoginInterceptor action之前执行!!!");
        
        //获取访问地址
        String url = request.getRequestURI();
        
        HttpSession session = request.getSession();
        UserRole userRole = (UserRole)session.getAttribute("userRole");
 		//判断session中是否存在值 存在则不拦截
        if(userRole!=null){
            return true;    //继续执行action
        } else{
              //重定向到登录页 
            response.sendRedirect("/nettysocket/loginIndex/loginIndex");
        	return false;
        }   
        
    }

//    该方法在action执行后,生成视图前执行。在这里,我们有机会修改视图层数据。
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView
            modelAndView) throws Exception {
//        System.out.println("LoginInterceptor action执行之后,生成视图之前执行!!");
    }

    //最后执行,通常用于释放资源,处理异常。我们可以根据ex是否为空,来进行相关的异常处理。
    //因为我们在平时处理异常时,都是从底层向上抛出异常,最后到了spring框架从而到了这个方法中。
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//        System.out.println("LoginInterceptor 最后执行!!!一般用于释放资源!!");
    }

}
           

拦截器配置文件内容

SpringMVC.xml中添加

<!-- 拦截器配置 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 拦截所有 -->
            <mvc:mapping path="/**" />
            <!-- 拦截的action -->
            <mvc:mapping path="/userOfElectric/index" />
            <!-- 不拦截的action -->
            <mvc:exclude-mapping path="/*/loginIndex"/>
            <bean class="com.comit.socket.filter.LoginInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
           

以上就是SpringMVC中拦截器的使用教程,有问题的小伙伴可以评论区或私信提出!

点赞收藏,以留备用!

我是xyushao!我们下期见!

SpringMVC 如何使用拦截器 - HandlerInterceptorSpringMVC 如何使用拦截器 - HandlerInterceptor