码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • API 设计/开发/测试工具:Apifox与怎么通过拦截器


    目录

    一、测试接口如何创建?

    二、如何添加body和header?

    三、如果项目设置的有拦截器?

    四、拦截器概念:

    4.1使用拦截器概念

    4.2 先写一个配置类WebMvcConfig.java

    4.3 AuthInitInterceptor拦截器中实现


    一、测试接口如何创建?

     微信小程序端的接口:

    所以微信小程序 会传的参数是json格式

    现在前端还没写好,先把api定义好,我负责写后端代码

    使用如下的

     测试接口的工具

    Apifox - API 文档、调试、Mock、测试一体化协作平台 - 接口文档工具,接口自动化测试工具,接口Mock工具,API文档工具,API Mock工具,API自动化测试工具

    新建项目、创建一个接口 

     

     要添加浏览器扩展,不然没法用

    添加前置url

    例如改为http://localhost:8888 

    二、如何添加body和header?

     

    GET请求:select方法

    POST请求:insert方法

    PUT请求:update方法

    DELETE请求:删除方法

     get请求填写Params

    put请求填写body如下:

     要选择json格式

     测试的是如下Controller层

    @PutMapping("/{id}/house")定义的路径

    三、如果项目设置的有拦截器?

    例如header必须携带token的 ,需要设置如下


    四、拦截器概念:

    怎么设置访问请求要包含自定义的token?

    4.1使用拦截器概念

    在springMVC中是通过配置xml文件实现的拦截

    如下文章:

    CRM-拦截器_crm拦截器_素心如月桠的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_47010003/article/details/124887090下面这篇是拦截的源码解析【可不看】

    Interceptor拦截器的源码解析:自定义Mybatis拦截器与Plugin_java 拦截器中的plugin_素心如月桠的博客-CSDN博客上一篇:Mybatis,动态代理CRUD源码分析上一篇中的Mybatis底层的四个处理器:StatementHandler 、ParameterHandler、ResultSetHandler、 TypeHandler插件也涉及到4个核心对象:StatementHandler 、ParameterHandler、ResultSetHandler、Executor回顾mybatis动态代理对象进行增删改查操作 mapper.queryStudentById()方法添加断点,调试进入方法内部调用了invoke(_java 拦截器中的pluginhttps://blog.csdn.net/m0_47010003/article/details/127347305看完第一篇就应该理解如何去自定义一个拦截器,也就是实现接口:

    1. implements HandlerInterceptor{
    2. preHandle();
    3. postHandle();
    4. afterCompletion();
    5. }

     然后去重写上面的3个方法

    主要是写preHandle()方法,在进行增删改查等在handler之前执行

    在springboot项目中添加拦截器的方式是添加注解就行,不用配置

    4.2 先写一个配置类WebMvcConfig.java

    WebMvcConfig

    @Configuration注解的作用:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象。

     把拦截器AuthInitInterceptor 引入,要添加@Resource注解

    如下:

    1. package com.huashang.config;
    2. import javax.annotation.Resource;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    5. import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
    6. import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
    7. import com.huashang.interceptor.AuthInitInterceptor;
    8. import com.huashang.interceptor.CrossInterceptor;
    9. import com.huashang.interceptor.SameUrlDataInterceptor;
    10. @Configuration
    11. public class WebMvcConfig extends WebMvcConfigurationSupport {
    12. @Resource
    13. private AuthInitInterceptor authInitInterceptor;
    14. @Resource
    15. private CrossInterceptor crossInterceptor;
    16. @Resource
    17. private SameUrlDataInterceptor sameUrlDataInterceptor;
    18. @Override
    19. public void addInterceptors(InterceptorRegistry registry) {
    20. registry.addInterceptor(crossInterceptor).addPathPatterns("/**");
    21. registry.addInterceptor(authInitInterceptor);
    22. registry.addInterceptor(sameUrlDataInterceptor);
    23. registry.addInterceptor(localeChangeInterceptor());
    24. }
    25. public LocaleChangeInterceptor localeChangeInterceptor() {
    26. LocaleChangeInterceptor lci = new LocaleChangeInterceptor();
    27. // 参数名
    28. lci.setParamName("lang");
    29. return lci;
    30. }
    31. }

    4.3 AuthInitInterceptor拦截器中实现

    preHandle方法添加代码如下:

     

    看根据token能不能查到数据

    所以我刚刚给我的测试接口,请求头中添加了一个token的参数为数据库中的1234321

    可以看到200请求成功了 

    拦截器代码如下:

    1. package com.huashang.interceptor;
    2. import java.io.IOException;
    3. import javax.annotation.Resource;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import org.springframework.stereotype.Component;
    7. import org.springframework.web.servlet.HandlerInterceptor;
    8. import org.springframework.web.servlet.ModelAndView;
    9. import com.huashang.domain.user.entity.User;
    10. import com.huashang.service.IUserService;
    11. import com.huashang.util.StringUtil;
    12. @Component("authInitInterceptor")
    13. public class AuthInitInterceptor implements HandlerInterceptor{
    14. @Resource
    15. private IUserService userService;
    16. @Override
    17. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    18. throws Exception {
    19. if(ignoreAuth(request)){
    20. return true;
    21. }
    22. User currentUser;
    23. String token = request.getHeader("token");
    24. if(StringUtil.stringBlank(token)){
    25. authFail(response);
    26. return false;
    27. }
    28. currentUser = userService.loginByToken(token);
    29. if(currentUser == null){
    30. authFail(response);
    31. return false;
    32. }
    33. request.setAttribute("currentUser", currentUser);
    34. return true;
    35. }
    36. @Override
    37. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    38. ModelAndView modelAndView) throws Exception {
    39. // do nothing
    40. }
    41. @Override
    42. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    43. throws Exception {
    44. request.setAttribute("currentUser", null);
    45. }
    46. private void authFail(HttpServletResponse response) throws IOException{
    47. response.setHeader("content-type", "application/json");
    48. response.setStatus(401);
    49. response.getWriter().write("{\"error\": \"auth error\"}");
    50. }
    51. private boolean ignoreAuth(HttpServletRequest request) {
    52. return request.getMethod().equalsIgnoreCase("options")
    53. || request.getRequestURI().contains("/users/login")
    54. || request.getRequestURI().contains("/users/token")
    55. || request.getRequestURI().contains("/error");
    56. }
    57. }

  • 相关阅读:
    图纸管理制度《二》
    Java SE 学习笔记(十四)—— IO流(2)
    docker安装gitlab
    vue 01 创建一个简单vue页面
    PHP手动为第三方类添加composer自动加载
    MySQ快速基础篇_MySQL数据库基础
    COMSOL Multiphysics在复合砌块热湿传递仿真中的应用
    为什么qt设置了utf-8 bom 格式后还是有乱码
    【算法训练-队列 一】【结构特性】用两个栈实现队列
    内存池的面试整理
  • 原文地址:https://blog.csdn.net/m0_47010003/article/details/133237850
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号