配置好 renren-fast 脚手架,学习完 Spring MVC 架构后,我需要具体调试 renren-fast 的接口,比如要新增某个接口。

什么是前后端分离

运行 renren-fast 项目时,我们访问 http://localhost:8080/renren-fast/ 的结果:

可以看到,接口给出了相应的回应,状态码 401 Unauthorized 代表客户端错误,指的是由于缺乏目标资源要求的身份验证凭证,发送的请求未得到满足。

运行 renren-fast-vue 项目时,我们访问 http://localhost:8001/#/login

接着使用Chrome自带的网络工具:

点击 Headers 可以查看 Request URL:

以此,我们确认访问 后台接口为:http://localhost:8080/renren-fast/captcha.jpg?uuid=11e75e91-f584-4e38-804b-d6776535eed9

同时还可以看到如下获取页面信息的 headers:

请求的访问接口是:http://localhost:8001/static/config/index.js

至此,我们便搞清楚了 renren-fast 前后端分离的业务是在说什么,即:后端逻辑使用 renren-fast 实现,前端请求获取的页面数据,使用 renren-fast-vue 实现。

写一个无需鉴权的GET接口

接下来我们基于 renren-fast 框架仿照 "/captcha.jpg" 写第一个接口, "/captcha.jpg"接口代码:

	/**
* 验证码
*/
@GetMapping("captcha.jpg")
public void captcha(HttpServletResponse response, String uuid)throws IOException {
response.setHeader("Cache-Control", "no-store, no-cache");
response.setContentType("image/jpeg"); //获取图片验证码
BufferedImage image = sysCaptchaService.getCaptcha(uuid); ServletOutputStream out = response.getOutputStream();
ImageIO.write(image, "jpg", out);
IOUtils.closeQuietly(out);
}

我们写一个 /testInterface 接口,在没写接口之前,我们访问: http://localhost:8080/renren-fast/testInterface ,返回如下样式:

我们编写接口:

	/**
* 测试接口
*/
@GetMapping("/testInterface")
public String testInterface() {
return "hello";
}

部署完之后访问: http://localhost:8080/renren-fast/testInterface ,仍旧是展示:

那问题来了,我们这个接口部署的有问题吗? 显然是没有问题的,只是一个简单示例,接着我们在代码中搜索 "{"msg":"![invalid token]","code":401}" ,可以发现有这么一句:

这意味着即使我们部署了接口,如果token不存在,也依旧会返回 401,但我们这个接口不需要 token 鉴权,所以要配置无需鉴权的逻辑。

我们从哪里可以知道怎么配置如需鉴权呢? 还记得我们上面发现的一个无需鉴权的接口吗?

http://localhost:8080/renren-fast/captcha.jpg?uuid=11e75e91-f584-4e38-804b-d6776535eed9

/captcha.jpg 这个接口无需登录,只要任意修改uuid就能获取验证码,所以我们全局搜索 /captcha.jpg,可以发现有3处地方:

一处是配置 filterMap,也就是无需鉴权的接口,我们在同样的地方加上我们自己的 testInterface 接口:

另一处是配置接口参数、描述、回包数据等,我们也简单配置一下:

配置完毕后重新部署,重新访问 http://localhost:8080/renren-fast/testInterface ,可以发现页面展示:

接口部署成功!

调试一个需要鉴权的GET接口

GET 接口可以简单理解为从服务器获取数据,只是读数据;而POST接口允许通过请求让服务器做一些事情:比如写数据、删数据等等。

当我们登录时,是向 http://localhost:8080/renren-fast/sys/login 发送 POST 请求,我们来使用 Postman 模拟发送 post请求,

首先,我们要获取 验证码,我们请求: http://localhost:8080/renren-fast/captcha.jpg?uuid=11e75e93 ,获取验证码:b676b

接着我们查看 /sys/login 接口代码得知:

登录接口所必须的参数有:

  • uuid
  • captcha
  • username
  • password

使用Postman发送Post请求成功:

我们获取 token 为 5d68f7779618adba8a1fb37df4bbe8e6 ,那是不是意味着我们可以通过 token 访问那些有权限的接口了呢?我们试试:

我们使用 Postman 发送 GET 请求: http://localhost:8080/renren-fast/sys/menu/nav?t=1647101933260&token=5d68f7779618adba8a1fb37df4bbe8e6

果然回包成功了:

小结

通过本篇文章的学习,我们明确了如下的内容:

  • renren-fast 前后端分离的设计理念
  • 学会配置一个无需鉴权的简单接口
  • 通过postman调试了鉴权post逻辑和get逻辑

至此我们可以自由编写 鉴权接口 和 非鉴权接口。


文章首发:问我社区

编写第一个GET、POST接口[renren-fast框架系列(1)]的更多相关文章

  1. Asp.net 面向接口可扩展框架之应用程序上下文作用域组件

    在团队中推广面向接口开发两年左右,成果总体来说我还是挺满意的,使用面向接口开发的模块使用Unity容器配置的功能非常稳定,便于共享迁移(另一个项目使用只需要复制配置和调用接口即可),如果再配合上DI那 ...

  2. 35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

      35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现in ...

  3. 要创建一个EJB,必须要至少编写哪些Java类和接口?

    要创建一个EJB,必须要至少编写哪些Java类和接口? A. 定义远程(或业务)接口 B. 定义本地接口 C. 定义Bean接口 D. 编写Bean的实现 解答:ABC

  4. 一起学Hadoop——使用IDEA编写第一个MapReduce程序(Java和Python)

    上一篇我们学习了MapReduce的原理,今天我们使用代码来加深对MapReduce原理的理解. wordcount是Hadoop入门的经典例子,我们也不能免俗,也使用这个例子作为学习Hadoop的第 ...

  5. 搭建Spring开发环境并编写第一个Spring小程序

    搭建Spring开发环境并编写第一个Spring小程序 2015-05-27      0个评论    来源:茕夜   收藏    我要投稿 一.前面,我写了一篇Spring框架的基础知识文章,里面没 ...

  6. ROS学习笔记三:编写第一个ROS节点程序

    在编写第一个ROS节点程序之前需要创建工作空间(workspace)和功能包(package).   1 创建工作空间(workspace) 创建一个catkin_ws: #注意:如果使用sudo一次 ...

  7. 搭建java开发环境、使用eclipse编写第一个java程序

    搭建java开发环境.使用eclipse编写第一个java程序 一.Java 开发环境的搭建 1.首先安装java SDK(简称JDK). 点击可执行文件 jdk-6u24-windows-i586. ...

  8. 自己编写的一个有关安卓应用开发培训PPT

    这个是我自己编写的一个有关安卓应用开发培训PPT,适合新手. 在这里下载PPT

  9. Servlet基础-手工编写第一个servlet

    [手工编写第一个servlet] [步骤] 1.继承HttpServlet 2.重写doGet()或者doPost()方法  //这个doGet或者doPost方法取决用户提交的方式 3.在web.x ...

  10. 第一章 开始编写第一个jsp

    第一章 搭好框架,需要tomcat服务器和jdk. JSP是Java Server Page的缩写,现在先让我们编写一个简单的jsp页面,看看jsp究竟能干什么? <%=new java.uti ...

随机推荐

  1. C语言中数组长度不能用变量定义吗?

    C语言里,所有变量空间都是在程序运行之初向系统申请的,包括指针,除了一些动态申请方式如malloc函数.没有申请的空间系统是不允许读写的.那么如果一个数组大小是变量定义,则在程序运行前不能确定数组大小 ...

  2. Eclipse不能启动,提示:The Eclipse executable launcher was unable to locate its companion launcher jar

    原因分析:JDK版本与eclipse不匹配 如jdk和eclipse版本号必须统一,64位都是64位,32位都是32位. jdk版本可以用命令,cmd进入命令窗口,然后输入java -version, ...

  3. 模仿系统的UIImageView

    整体思路:     我们想要模仿系统的UIImageView,我们必须得要知道系统的UIView怎么用.     系统的用法是创建一个UIImageView对象,设置frame,给它传递一个UIIma ...

  4. 解决Wordpress提示FTP登录问题

    向wordpress目录的wordpress-config.php中添加 define("FS_METHOD", "direct"); define(" ...

  5. cmd中删除、添加、修改注册表命令

    转自:http://www.jb51.net/article/30586.htm regedit的运行参数 REGEDIT [/L:system] [/R:user] filename1 REGEDI ...

  6. mysql入门基础增删查改

    数据查询语法(DQL) DQL就是数据查询语言,数据库执行DQL语句不会对数据进行改变,而是让数据库发送结果集给客户端. 语法: SELECT selection_list /*要查询的列名称*/ F ...

  7. Docker的数据管理(下)——docke镜像的创建

    Docker的数据管理(下)--docke镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于 dockerfile 创建 4.Dockerfile 镜像操作常用命令 5.dockerfi ...

  8. 前端语言之js(对比python快速入门)

    昨日内容回顾 浮动 定位 溢出 透明度 模态框 今日内容概要 变量与常量 基本数据类型 数据类型内置方法 函数 常见内置对象 BOM与DOM操作 内容详细 1.变量与常量 # 在JS中声明变量需要使用 ...

  9. Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器,包括Spring Security和Spring Boot

    2月14日,Keycloak 团队宣布他们正在弃用大多数 Keycloak 适配器. 其中包括Spring Security和Spring Boot的适配器,这意味着今后Keycloak团队将不再提供 ...

  10. Solution -「LOCAL」「cov. 牛客多校 2020 第五场 C」Easy

    \(\mathcal{Description}\)   Link.(完全一致)   给定 \(n,m,k\),对于两个长度为 \(k\) 的满足 \(\left(\sum_{i=0}^ka_i=n\r ...