学习自:https://www.bilibili.com/video/BV1aE41167Tu?p=27
拦截器
一、介绍
二、自定义拦截器
实例1—简例
1、控制器
@RestController
public class MyController {
@RequestMapping("i1")
public String i1() {
System.out.println("=====执行方法i1=====");
return "ok";
}
}
2、自定义拦截器,必须实现 HandlerInterceptor 接口。我们平时基本只用 preHandle() 方法,因此可不必实现另外两个方法(而且已有默认实现),此处只是测试
public class MyInterceptor implements HandlerInterceptor {
//return true 为放行,return false 直接拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("------------处理前------------");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("------------处理后------------");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("------------清理------------");
}
}
3、spring-mvc.xml 中配置拦截器
<!--拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.zlc.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
请求成功
实例2—登录权限拦截
index.jsp
login.jsp
success.jsp
控制器
@Controller
@RequestMapping("/user")
public class UserController {
//跳转到登陆页面
@RequestMapping("/goLogin")
public String jumpLogin() {
return "login";
}
//跳转到成功页面
@RequestMapping("/jumpSuccess")
public String jumpSuccess() {
return "success";
}
//登陆提交
@RequestMapping("/login")
public String login(HttpSession session, String username, String pwd) {
// 向session记录用户身份信息
System.out.println("接收前端===" + username);
session.setAttribute("user", username);
return "success";
}
//退出登陆
@RequestMapping("/logout")
public String logout(HttpSession session) {
// session 过期
session.invalidate();
return "login";
}
}
拦截器
public class LoginInterceptor implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException {
// 如果是登陆页面则放行
System.out.println("url: " + request.getRequestURI());
if (request.getRequestURI().contains("ogin")) {
return true;
}
HttpSession session = request.getSession();
// 如果用户已登陆也放行
if (session.getAttribute("user") != null) {
return true;
}
// 用户没有登陆跳转到登陆页面
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
测试