拦截请求并进行JWT令牌验证(下)

基于上一篇文章登录验证中JWT的生成并下发,进行请求的拦截并对JWT进行验证,放行。

详情见上一篇:

基于springboot的jwt生成下发icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/141727904

拦截器Interceptor

spring中提供的用来动态拦截控制器中方法的执行。拦截请求,在指定的方法调用前后,根据业务需求执行一些预先设定好的任务。(只拦截spring中的资源/请求,不包括浏览器端)

定义拦截器

实现HandlerInterceptor接口,并重写其中三个方法

方法1:目标方法运行前执行,返回一个布尔值。true:拦截放行,false:拦截不放行,如果不放行,将不会访问到  login登录的接口,无任何信息

方法2:目标方法运行后执行

方法3:视图渲染完成后运行,最后执行。

@Component
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

注册配置拦截器

实现WebMvcConfigurer接口,注入已经定义好的拦截器对象,并配置拦截的规则(这里拦截所有资源/请求)

@Configuration//声明配置类
public class jjwebConfig implements WebMvcConfigurer {
    @Autowired
    private jjwebConfig jjwebConfig;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jjwebConfig).addPathPatterns("/**");//拦截所有资源
    }
}

拦截路径

 /* :只能拦截一级路,如 /emp, /dep

/** :拦截任意级路径,如/emp/1.........

拦截器中进行JWT校验逻辑,是否放行请求

拦截逻辑

不放行的几种情况:请求头中无token信息,token解析失败。hasLength 用于判断一个字符串是否为空或只包含空格字符

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取请求的url
        String s = request.getRequestURL().toString();
        if (s.contains("login")){
            log.info("放行");
            return true;
        }
        //获取请求头中的jwt  token信息
        String jwt = request.getHeader("token");
        //判断令牌是否存在,否则返回错误,不放行
        if (!StringUtils.hasLength(jwt)){
            Result.error("err_login");
            return false;
        }
        //如果存在就进行解析,解析失败返回false
        try {
            JwtUtils.parseJWT(jwt);
        }catch (Exception e){
            log.info("解析失败");
            return false;
        }
        log.info("放行");
        return true;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值