springboot拦截器

简介: springboot拦截器

公众号merlinsea


拦截器:springboot会根据访问请求的url来进行拦截,即如果url和我拦截器的配置路径匹配,那么先执行拦截器中的代码,然后再决定是否执行后续的controller-service等其他层的代码。


1、编写拦截器配置类InterceptorConfig

核心:

   1、配置类交给spring扫描

   2、在registry中添加拦截器并配置拦截路径url


/**
 * 拦截器配置类,需要实现WebMvcConfigurer接口
 * 向拦截器配置类中添加拦截器,并配置路径
 */
@Configuration
class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //registry中添加拦截器并配置拦截路径
        registry.addInterceptor(getLoginInterceptor()).addPathPatterns("/api/v1/pri/**");
        registry.addInterceptor(new TwoIntercepter()).addPathPatterns("/api/v1/pri/**");
        WebMvcConfigurer.super.addInterceptors(registry);
    }
    @Bean
    public LoginInterceptor getLoginInterceptor(){
        return new LoginInterceptor();
    }
}


2、编写LoginInterceptor拦截器类(拦截器类可以有多个),通常会完成登陆校验,敏感词过滤等功能

核心:

   1、preHandle中完成核心业务逻辑(返回true放行就执行controller层逻辑,返回false不放行并返回错误信息)

   2、实现HandlerInterceptor接口

   3、注册到拦截器配置类中

/**
 * 拦截器类需要实现HandlerInterceptor接口
 *
 * @author lianglin
 */
public class LoginInterceptor implements HandlerInterceptor {
    private static final ObjectMapper objectMapper = new ObjectMapper();
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("LoginIntercepter preHandle =====");
        //获取token
        String token = request.getHeader("token");
        if(StringUtils.isEmpty(token)){
            token = request.getParameter("token");
        }
        if(!StringUtils.isEmpty(token)){
            //判断token是否合法
            User user = UserServiceImpl.sessionMap.get(token);
            if(user!=null){
                //返回true是放行,执行后续的controller逻辑
                return true;
            }else {
                JsonData jsonData =  JsonData.buildError("登录失败,token无效",-2);
                String jsonStr = objectMapper.writeValueAsString(jsonData);
                renderJson(response,jsonStr);
                //返回false是不放行,告诉前端数据无效
                return false;
            }
        }else {
            JsonData jsonData =  JsonData.buildError("未登录",-3);
            String jsonStr = objectMapper.writeValueAsString(jsonData);
            renderJson(response,jsonStr);
            return false;
        }
    }
    private void renderJson(HttpServletResponse response,String json){
        response.setContentType("application/json");
        response.setCharacterEncoding("UTF-8");
        try(PrintWriter writer = response.getWriter()){
            writer.print(json);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("LoginIntercepter postHandle =====");
        HandlerInterceptor.super.postHandle(request,response,handler,modelAndView);
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("LoginIntercepter afterCompletion =====");
        HandlerInterceptor.super.afterCompletion(request,response,handler,ex);
    }
}

640.png


相关文章
|
5天前
|
Java
SpringBoot中的拦截器 interceptor
SpringBoot中的拦截器 interceptor
23 0
|
5天前
|
Java 容器
SpringBoot之拦截器
SpringBoot之拦截器
|
9月前
|
前端开发 Java 数据安全/隐私保护
SpringBoot配置拦截器
SpringBoot配置拦截器
115 0
|
9月前
|
Java 容器
Springboot中拦截器的使用
Springboot中拦截器的使用
32 0
|
9月前
|
Java 应用服务中间件 API
【SpringBoot】过滤器 | 拦截器
【SpringBoot】过滤器 | 拦截器
94 0
|
11月前
|
前端开发 Java 数据安全/隐私保护
【SpringBoot学习笔记 十】深入理解SpringBoot拦截器
【SpringBoot学习笔记 十】深入理解SpringBoot拦截器
124 0
|
11月前
|
Java
springboot中基于springmvc的拦截器的实现
springboot中基于springmvc的拦截器的实现
74 0
|
前端开发 Java API
springboot下使用过滤器与拦截器
springboot下使用过滤器与拦截器
SpringBoot自定义拦截器
在springboot中有一个叫做ResourceProperties的类,里面就定义了静态资源的默认查找路径: 默认的静态资源路径为: • classpath:/META-INF/resources/ • classpath:/resources/ • classpath:/static/ • classpath:/public 在项目中创建路径进行测试 在static目录下创建index.html文件
springboot08、拦截器HandlerInterceptor
springboot08、拦截器HandlerInterceptor
82 0
springboot08、拦截器HandlerInterceptor