- 上一篇介绍完了基础应用和细节,现在来完成登录校验功能
- 基本流程:
- 要进入后台管理系统,必须完成登录操作,此时就需要访问登录接口Login。
- 登录成功服务端会生成一个JWT令牌,并且返回给前端,前端会将JWT令牌存储下来。
- 在后续每次请求中,都会将JWT令牌携带到服务端,请求到达服务端要想访问对应的业务功能就必须校验令牌的有效性。
- 登录校验的过滤器,在过滤期中校验令牌的有效性。如果令牌无效就响应错误信息,不会再去放行访问的对应资源。如果令牌存在并且有效,此时就会放行访问对应的web资源,执行响应的业务操作。
- 在开发之前明确两个问题?
- 所有的请求拦截到以后,都需要校验令牌吗?
- 登陆请求例外
- 拦截到请求之后,什么情况下才可以放行,执行业务操作?
- 有令牌,并且校验通过,否则返回未登录错误的错误结果
- 所有的请求拦截到以后,都需要校验令牌吗?
- 先画一张流程图:
- 备注说明:
- 用户登录成功后,系统自动下发JWT令牌,然后在后续每次请求中,都需要在请求头header中携带到服务端,请求头的名称为token,值为登录下发的JWT令牌。
- 废话不多说咱们直接上代码:
-
@Slf4j @WebFilter(urlPatterns = "/*") //拦截所有请求 public class LoginCheckFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException { //前置:强制转换为http协议的请求对象、响应对象 (转换原因:要使用子类中特有方法) HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //1.获取请求url String url = request.getRequestURL().toString(); log.info("请求路径:{}", url); //请求路径:http://localhost:8080/login //2.判断请求url中是否包含login,如果包含,说明是登录操作,放行 if(url.contains("/login")){ chain.doFilter(request, response);//放行请求 return;//结束当前方法的执行 } //3.获取请求头中的令牌(token) String token = request.getHeader("token"); log.info("从请求头中获取的令牌:{}",token); //4.判断令牌是否存在,如果不存在,返回错误结果(未登录) if(!StringUtils.hasLength(token)){ log.info("Token不存在"); Result responseResult = Result.error("NOT_LOGIN"); //把Result对象转换为JSON格式字符串 (fastjson是阿里巴巴提供的用于实现对象和json的转换工具类) String json = JSONObject.toJSONString(responseResult); response.setContentType("application/json;charset=utf-8"); //响应 response.getWriter().write(json); return; } //5.解析token,如果解析失败,返回错误结果(未登录) try { JwtUtils.parseJWT(token); }catch (Exception e){ log.info("令牌解析失败!"); Result responseResult = Result.error("NOT_LOGIN"); //把Result对象转换为JSON格式字符串 (fastjson是阿里巴巴提供的用于实现对象和json的转换工具类) String json = JSONObject.toJSONString(responseResult); response.setContentType("application/json;charset=utf-8"); //响应 response.getWriter().write(json); return; } //6.放行 chain.doFilter(request, response); } }
-
登录校验-Filter
最新推荐文章于 2023-08-05 20:02:15 发布
文章详细介绍了如何使用JWT进行登录校验。当用户登录成功后,服务器生成JWT令牌并返回给前端。前端在后续每个请求中携带此令牌,过滤器检查请求头中的JWT令牌,对非登录请求进行权限校验。若令牌不存在或解析失败,则返回未登录错误。反之则放行请求执行业务操作。
摘要由CSDN通过智能技术生成