一、回顾SpringMVC使用拦截器的步骤:
1、自定义拦截器类,并实现HandleInterceptor接口
/**
* 拦截器类:拦截用户的请求
*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//编写登录拦截业务逻辑
//返回 true 通过
//返回 false 被拦截
System.out.println("--------登录拦截器---------");
String loginName = "";
//从session中获取name数据
Object attr = request.getSession().getAttribute("name");
if (attr != null){
loginName = (String)attr;
}
//判断登录的账号是否符合要求
if (!"zs".equals(loginName)){
//不能访问
response.sendRedirect(request.getContextPath()+"/user/error");
return false;
}
return true;
}
@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 {
}
}
2、在springmvc配置文件中注册拦截器类
<!--声明拦截器: 拦截器可以有0或多个
在框架中保存多个拦截器是ArrayList,
按照声明的先后顺序放入到ArrayList
-->
<mvc:interceptors>
<!--声明第一个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/user/**"/>
<mvc:exclude-mapping path="/user/error"/>
<!--声明拦截器对象-->
<bean class="com.hcz.handler.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
二、SpringBoot使用拦截器的步骤:
1、创建一个SpringBoot的Web项目
2、创建一个实体类User对象
public class User {
private Integer id;
private String username;
3、自定义拦截器类,并实现HandleInterceptor接口
public class UserInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("进入拦截器--------------------------");
//编写业务拦截规则
//返回 true 通过
//返回 false 被拦截
//从session中获取用户的信息
User user = (User) request.getSession().getAttribute("user");
//判断是否登录
if (null == user){
//没登录
response.sendRedirect(request.getContextPath()+"/user/error");
return false;
}
return true;
}
@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 {
}
}
4、创建一个控制类
@Controller
@RequestMapping(value = "/user")
public class UserController {
/**
* 用户登录的请求方法
* @param request
* @return
*/
@RequestMapping(value = "/login")
@ResponseBody
public Object login(HttpServletRequest request){
//将用户信息存放到session中
User user = new User();
user.setId(1001);
user.setUsername("hcz");
request.getSession().setAttribute("user",user);
return "login SUCCESS";
}
/**
* 该请求需要用户登录之后才可访问
* @return
*/
@RequestMapping(value = "/center")
@ResponseBody
public Object center(){
return "See Center Message";
}
/**
* 该请求不登录也可以访问
* @return
*/
@RequestMapping(value = "/out")
@ResponseBody
public Object out(HttpServletRequest request){
request.getSession().removeAttribute("user");
return "Out";
}
/**
* 该请求不登录也可以访问
* @return
*/
@RequestMapping(value = "/error")
@ResponseBody
public Object error(){
return "Error";
}
}
5、@Configuration 定义配置类-拦截器
在 项 目 中 创 建 一 个 config 包 , 创 建 一 个 配 置 类 InterceptorConfig , 并 实 现WebMvcConfigurer 接口, 覆盖接口中的 addInterceptors 方法,并为该配置类添加@Configuration 注解,标注此类为一个配置类,让 Spring Boot 扫描到,这里的操作就相当于 SpringMVC 的注册拦截器 ,@Configuration 就相当于一个 applicationContext-mvc.xml
/**
* 定义此类为配置文件(即相当于之前的xml配置文件)
*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
//要拦截user下的所有访问路径,必须用户登录后才可以访问
String [] addPathPatterns = {
"/user/**"
};
//要排除的路径,说明不需要用户登录也可以访问
String [] excludePathPatterns = {
"/user/out","/user/error","/user/login"
};
//相当于mvc:interceptor bean class=""
registry.addInterceptor(new UserInterceptor())
.addPathPatterns(addPathPatterns).
excludePathPatterns(excludePathPatterns);
}
}
6、发布项目进行测试
- 直接输入http://localhost:8080/user/center
- 先登录http://localhost:8080/user/login
- 再输入http://localhost:8080/user/center
- 退出登录http://localhost:8080/user/out
- 再一次输入http://localhost:8080/user/center