Spring Boot 学习(一) 拦截器

Ctrl+F12  查看此类的方法,关系有哪些

Spring Boot 学习(一) 拦截器

 

 

 

必须继承这HandlerInterceptor 这个类

类中有三个方法 

public class LoginIntercepter implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        目标方法执行之前

        return false;
    }

    @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 {
//        页面渲染之后
    }
}

 

拦截器
1.配置好拦截器要拦截哪些请求
2.把这些配置放在容器中
@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        目标方法执行之前
        HttpSession session =  request.getSession();  //用于获取request信息
        Object loginUser = session.getAttribute("login");//这里的login是保存的用户信息,获取当前用户信息
        if(loginUser != null) {
            return true;   //放行
        }
        request.setAttribute("msg","请先登陆");   //获取到错误信息,前提是当用户没有登陆或密码错误,此时记录的是错误提示信息
        request.getRequestDispatcher("/").forward(request,response);      //重定向到默认
        return false;
    }

 

创建一个config类

所有处理web事务的接口是在WebMvcConfigurer 

@Configuration
public class AdminConfig implements WebMvcConfigurer {  //所有定制web功能的都是WebMvcConfigurer接口

}

其中WebMvcConfigration 中有addInterceptors这个方法

Spring Boot 学习(一) 拦截器

 

 

 

拦截住了默认是一片空白,所以在上面添加了一个拦截信息

@Configuration
public class AdminConfig implements WebMvcConfigurer {  //所有定制web功能的都是WebMvcConfigurer接口
    public void addInterceptors(InterceptorRegistry registry) { //重写这方法
        registry.addInterceptor(new LoginIntercepter())    //添加一个拦截器(LoginIntercepter是拦截器类,实现了接口HandlerInterceptor)
                                .addPathPatterns("/**")     //(/**)表示默认拦截所有请求   add表示要拦截哪些url请求 
                                .excludePathPatterns("/","/login");  //exclude表示放行的是哪些,此时静态资源也被拦截,css和js生效

    }
}

因为配了/** 表示拦截所有,所以此时把静态资源也给拦截了

此时进行添加不拦截文件

方法一、  添加放行文件夹,静态资源文件夹里的内容

 

.excludePathPatterns("/","/login","/css/**","/js/**","/fonts/**") 

 

总结

拦截器:

1.编写一个拦截器,实现HandlerInterceptor接口

2.拦截器注册到容器中(实现WebMvcConfigurer的addInterceptors)

3.指定拦截规则,【如果拦截所有那么静态资源也会被拦截】

 

 

补充:

日志的使用

import lombok.extern.slf4j.Slf4j;
@Slf4j   在类名前加上注解
//        这里可以添加一个日志,获取请求路径
        String requesURI = request.getRequestURI();
        log.info("preHandle拦截的请求路径是{}",requesURI);

 

拦截器的执行过程

preHandle ->   postHandle   ->  afterCompletion

 

上一篇:Springboot中WebMvcConfigurer接口详解


下一篇:条件测试