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!我们下期见!