zoukankan      html  css  js  c++  java
  • SpringBoot中使用拦截器

    回顾SpringMVC使用拦截器步骤

    https://www.cnblogs.com/mengd/p/13538396.html

    一、Spring Boot 使用拦截器步骤

    1. 创建一个SpringBoot 框架 Web 项目

    2. 创建model

    用户信息

    package com.md.springboot.model;
    
    /**
     * @author MD
     * @create 2020-08-22 15:38
     */
    public class User {
    
        private Integer id;
    
        private String name;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    
    

    3. 实现一个登录拦截器

    在包com.md.springboot.interceptor下

    package com.md.springboot.interceptor;
    
    import com.md.springboot.model.User;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * @author MD
     * @create 2020-08-22 15:35
     */
    public class UserInterceptor implements HandlerInterceptor { // 快捷键ctrl+O 实现这三个方法
    
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            // 业务拦截的规则
    
            // 从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. 创建一个控制层

    package com.md.springboot.web;
    
    import com.md.springboot.model.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * @author MD
     * @create 2020-08-22 15:50
     */
    
    @Controller
    @RequestMapping(value = "/user")
    public class UserController {
    
    
        //    用户不登陆也能访问
        @RequestMapping(value = "/login")
        @ResponseBody
        public Object login(HttpServletRequest request){
            // 将用户信息存放到session中
            User user = new User();
            user.setId(1001);
            user.setName("pony");
            request.getSession().setAttribute("user",user);
    
            return "login success";
        }
    
    
    
    //    用户登陆才能访问
        @RequestMapping(value = "/center")
        public @ResponseBody Object center(){
            return "You see center";
        }
    
    
    
    
        //    用户不登陆也能访问
        @RequestMapping(value = "/out")
        public @ResponseBody Object out(){
            return "You look outside";
        }
    
    
    
        //    用户不登陆也能访问
        //  用户未登陆访问了需要登陆的页面
        @RequestMapping(value = "/error")
        public @ResponseBody Object error(){
            return "error";
        }
    
    }
    
    

    5. @Configuration 定义配置类- 拦截器

    在 项 目 中 创 建 一 个 config 包 , 创 建 一 个 配 置 类 InterceptorConfig , 并 实 现WebMvcConfigurer 接口, 覆盖接口中的 addInterceptors 方法,并为该配置类添加@Configuration 注解,标注此类为一个配置类,让 Spring Boot 扫描到,这里的操作就相当于 SpringMVC 的注册拦截器 ,@Configuration 就相当于一个 applicationContext-mvc.xml

    重点看注释

    实际中拦截地址不必这么麻烦,这里演示多种形式

    package com.md.springboot.config;
    
    import com.md.springboot.interceptor.UserInterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /**
     * @author MD
     * @create 2020-08-22 15:42
     */
     // 定义此类为配置类(相当于之前的xml配置文件)
    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
    
    
        // mvc:interceptors
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
    
    
            // 拦截user下的所有访问请求,必须用户登陆才可访问
            // 但这样的话就全部拦截了,有一些请求是不需要拦截的
            String[] addPathPatterns = {
                    "/user/**"
            };
    
            // 排除拦截的地址,也就是用户不登陆也能访问的路径
            String[] excludePathPatterns = {
                    "/user/out","/user/login" , "/user/error"
            };
    
    
            // mvc:interceptor
            // 传入自定义的拦截器,以及拦截地址
            registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
    
        }
    }
    
    

    6. 测试

    首先访问不登陆也能访问的页面

    然后访问必须登陆之后才能看到的页面,会自动跳转到error页面

    进行登陆

    登陆成功之后再访问

    作者:山丘!

    -------------------------------------------

    你闻讯而来,我大喜过望,我在这等你,你又在哪呢?喜欢的话加一个“关注”呗!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

  • 相关阅读:
    05_python_字典
    04_python_列表
    03_python_基本数据类型
    02_python_while循环/格式化输出/逻辑运算
    01_python_初始python
    vue中v-model的数据双向绑定(重要)
    vue中轮播图的实现
    侦听器watch 监听单个属性
    vue computed监听多个属性
    vue中ajax应用
  • 原文地址:https://www.cnblogs.com/mengd/p/14612369.html
Copyright © 2011-2022 走看看