如何完成登录校验,看完这篇文章你就明白了

首先先让我们明晰,如果要完成登录校验,就需要我们对于浏览器发出的请求都先做一个统一拦截,而我们就是在这个拦截层中,完成对于jwt令牌的校验。

目前主流的拦截方法有两种,一种是Filter过滤器,另一种则是Interceptor的拦截器,关于这两种拦截的区别在后边会讲到,下面我们先讲一下过滤器的实现方法

1.要想设置一个过滤器,我们要先定义一个过滤器类,并且由于这个过滤器Filter是javaweb三大件中的,所以这里我们需要先加上一个注解@WebFilter,并且要在启动类上声明@ServletComponentScan,因为我们搭建的是一个springboot的项目,而这里需要调用一个javaweb的服务

2.接下来在这个定义的这个方法中实现接口Filter这个接口,并实现其中的方法,而其中一共有三种方法需要我们实现,其中doFilter是最重要的,因为这个方法决定了我们是否放行这个请求,所以我们的登录校验就在这个当中进行完成,其他两个方法init,destroy一个是初始化方法,一个是销毁方法,都只执行一次

3.下面我们就来梳理一下执行登录校验的流程

4.下面就是代码的设计

值得注意的一点是,我们在进行登录校验之前,需要先将请求强制转为HttpServletRequest和HttpServletResponse类型,因为方法传递来的参数是Servlet类型的

//1.获取请求url
String url = req.getRequestURL().toString();
log.info("请求的url:{}",url);

//2.判断请求url中是否包含login,如果包含,说明是登录操作,放行(不要想着这里不需要return,因为当你登录之后,你就不请求登录这个路径了,然后再你请求别的路径的时候再校验令牌,所以这一步登陆之后就不需要再做下面的操作了)
if(url.contains("login")){
    log.info("这是一个登录操作");
    filterChain.doFilter(servletRequest,servletResponse);
    return;
}

//3.获取请求头当中的token(令牌)
String jwt = req.getHeader("token");

//4.判断令牌是否存在,如果在就往下走,如果不存在,则返回错误结果(未登录),然后return
if (!StringUtils.hasLength(jwt)){
    log.info("请求头token为空,返回未登录的信息");
    Result error = Result.error("NOT_LOGIN");
    //手动将对象转换成json格式的数据响应回去(借助阿里巴巴提供的一个fastjson的工具包)
    String notlogin = JSONObject.toJSONString(error);
    //获取请求信息用的是req下面的方法,响应回请求信息用的是resp下面的方法
    resp.getWriter().write(notlogin);
    return;
}

//5.解析token,成功解析就往下走,如果解析失败,不成功则返回错误结果(未登录),然后return
//这列try/catch是通过快捷键ctrl+alt+t实现的,用来捕获异常的(如果出现异常,说明解析失败,如果没有出现异常,说明解析成功)
try {
    JwtUtils.parseJWT(jwt);
} catch (Exception e) {
    e.printStackTrace();
    log.info("解析令牌失败,返回未登录的错误信息");

    //这里和上面的代码是一样的
    Result error = Result.error("NOT_LOGIN");
    //手动将对象转换成json格式的数据响应回去(借助阿里巴巴提供的一个fastjson的工具包)
    String notlogin = JSONObject.toJSONString(error);
    //获取请求信息用的是req下面的方法,响应回请求信息用的是resp下面的方法
    resp.getWriter().write(notlogin);
    return;
}

//6.放行(最后一步)
log.info("令牌合法,放行");
filterChain.doFilter(servletRequest,servletResponse);

做完这一步我们启动服务

进入我们之前保存的项目服务端的请求地址,发现就直接跳转到登陆界面了,这就说明我们的拦截成功了

查询部门数据,成功

在java后端也可以看到登录令牌验证成功,放行我们到了服务端口

接下来我们就讲讲interceptor和Filter的区别

1.首先是创建区别,但是下面我们需要注意的是,我们要定义一个配置类,在这个配置类中我们需要注册这个拦截器,然后将定义的拦截器交给ioc容器保管,在配置类当中完成注入,进行登录操作

2.第二就是对于前端请求的参数的区别,我们需要注意的是,不用再像Filter那样做强制类型转换,因为传递的参数类型就是HttpServlet的类型

3.还有就是那个interceptor中的放行非常简单,就是直接return true即可,如果不放行,则返回一个false

4.下面的登录校验代码基本与上面一模一样

以上基本就是登录校验的全部问题了,javaweb开发也就告一段落啦~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值