springboot13-拦截器

springboot使用拦截器:
1、定义一个拦截器,实现HandlerInterceptor接口
2、创建一个配置类(即:在SpringMVC配置文件中使用mvc:interceptor标签)

1、创建User实体类

public class User {
    private String name;
    private int age;

    public User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

2、编写请求路径

@Controller
@RequestMapping("/user")
public class UserController {

    //用户登录的请求
    //该请求路径不需要用户登录也可访问
    @RequestMapping("/login")
    public @ResponseBody Object login(HttpServletRequest request){
        //将用户的信息存到session中
        User user = new User();
        user.setName("张三");
        user.setAge(15);
        request.getSession().setAttribute("user", user);

        return "Loign Success";
    }

    //该请求需要用户登录之后才可以访问
    @RequestMapping("/center")
    public @ResponseBody Object center(){
        return "See Centor Message";
    }

    //该请求不登录也可访问
    @RequestMapping("/out")
    public @ResponseBody Object out(){
        return "Out see anytime";
    }

    //如果该用户未登录访问了需要登录才可以访问的亲贵,之后会跳转到该请求路径
    //该请求路径不需要用户登录也可访问
    @RequestMapping("/error")
    public @ResponseBody Object error(){
        return "error";
    }
}

3、编写拦截器

public class UserInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        //编写业务拦截的规则
        //从session中获取用户的信息
        User user = (User) request.getSession().getAttribute("user");

        if(user == null){
            //重定向
            System.out.println("123");
            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、编写拦截器的配置类

@Configuration //定义此类为配置文件(即相当于之前的xml配置文件)
public class InterceptorConfig implements WebMvcConfigurer {

    //mvc:interceptors
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //那些路径被拦截
        String[] addPathPatterns = {
                "/user/**"
        };

        //那些路径被排除---不被拦截
        String[] excludePathPatterns = {
                "/user/out", "/user/error", "/user/login"
        };

        //mvc:interceptor  bean class=""
        //addPathPatterns:添加被拦截路径
        //excludePathPatterns:添加不被拦截的路径
        registry.addInterceptor(new UserInterceptor()).addPathPatterns(addPathPatterns).excludePathPatterns(excludePathPatterns);
    }
}

5、启动类启动

posted @ 2021-09-14 19:28  不是孩子了  阅读(38)  评论(0)    收藏  举报