SpringBoot---(5) SpringBoot使用拦截器(对比SpringMVC拦截器)

一、回顾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
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hcz666/article/details/115422157