微服务: 写注册和登录的接口

【Python】Python注册微服务到nacos github 的nacos项目的发布页(),选择所要下载的nacos版本,在nacos下方的assets中选择安装包进行下载。解压nacos安装包到指定目录。初始化Nacos数据库。修改nacos配置文件。启动Nacos服务,这里只是以单机模式启动Nacos。启动完成之后,访问页面进行验证。如果没有在配置文件中修改密码,这里的用户名和密码是:nacos/nacos,直接登录即可。 阅读详情

原文 微服务: 简单的用户名注册和登录,优快云同步发布。

转载请注明出处,谢谢!


内容概要

在本篇中我们要完成一个目标:提供注册、登录的接口给前端或者客户端来使用。

涉及到的内容主要有下面几个:

1 、SpringBoot 中常用的注解如何使用?

2 、如何对接口进行单元测试?

其他相关的微服务文章,可以点击 微服务专栏 了解。

常用注解

控制器 Controller 是 Spring 中最基本的组件,主要是处理跟用户交互的,一般每个业务逻辑都会有一个 Controller,提供 HTTP 请求接口,用户请求接口进行数据访问。

跟 Controller 相关的几个注解主要有 @Controller,@RestController,@RequestMapping,@PathVariable,@RequestParam,@GetMapping 等。

  • @Controller:标注 Controller 类,处理 HTTP 请求。
  • @RestController:标注 Controller 类,Spring 4 新加注解,相当于 @Controller + @ResponseBody ,主要是为了使 HTTP 请求返回数据格式为 json 格式,正常情况下都是使用这个注解。
  • @RequestMapping:配置 URL 映射,即请求的地址。
  • @PathVariable,@RequestParam ,@QueryParam ,@PathParam 注解,可以参考 微服务: 学习几个容易混淆的URL注解 这篇文章。
  • @GetMapping,@PostMapping,@PutMapping 称之为组合注解,它们等价于 @RequestMapping 单独指定映射再指定请求方法。举个例子,如下:
@RequestMapping(value = "/signup/name", method = RequestMethod.POST)

等价于下面的注解:

@PostMapping(value = "/signup/name")

编写实体

不管是登录还是注册,都是每个用户进行的操作,我们先定义用户实体类 MSUser,代码如下:

import lombok.Data;
import java.io.Serializable;

@Data
public class MSUser implements Serializable {
    private String userID;

    // 账号名称,用于登录,不可以修改
    private String accountName;

    // 账号密码
    private String accountPwd;

    // 昵称默认和accountName一致,可以修改
    private String nickName;

    private Integer age;

    private Integer gender;

    // 座右铭;格言;箴言
    private String motto;
}

大家可以看到,在实体类 MSUser 中,我们用到了注解 @Data ,该注解来源于 lombok,需要自己在IDEA中安装该插件,安装方法请大家自行搜索解决。

注解 @Data 相当于给我们自动实现了 Get 、Setter、toString、 equals 和 hashCode 方法以及构造方法,不需要我们自己再去写这些代码。

HTTP 的请求响应结果,也可以被封装为实体类,如下 MSResponse 就是用来承载HTTP返回的响应。

import lombok.Data;

@Data
public class MSResponse<T> {
    private int code;
    private String msg;
    private T results;
}

编写接口

一般来说,用户注册需要将用户的信息存下来,存到数据库中方便后续使用这份数据,这个行为称之为 数据持久化 ,现在我们不做这个操作,只是纯粹的提供接口让用户可以注册、登录我们的系统,后续再来考虑和实现数据持久化。

这个阶段注册功能只提供 用户名+密码 的方式,该请求是个 POST 请求,主要核心代码如下:

@RestController
@RequestMapping(value = "signup")
public class MSSignupController {

    @CrossOrigin(origins = {"*"})
    @PostMapping(value = "/name")
    public MSResponse signup(@RequestParam(value = "username") String userName, @RequestParam(value = "userpwd") String userPwd) {
        MSResponse response = new MSResponse();
        MSUser user = null;
        if (null == userName || null == userPwd || userName.length() <= 0 || userPwd.length() <= 0) {
            MSResponseEnum signupError = MSResponseEnum.SignupInvalidInfo;
            response.setMsg(signupError.getMsg());
            response.setCode(signupError.getCode());
        } else {
            response.setCode(MSResponseEnum.SUCCESS.getCode());
            response.setMsg(MSResponseEnum.SUCCESS.getMsg());
            user = MSUserUtil.createUser(userName, userPwd);
        }

        response.setResults(user);

        return response;
    }
}

同理,登录功能也只提供 用户名+密码 的方式,该请求是个 GET 请求,主要核心代码如下:

@RestController
@RequestMapping(value = "signin")
public class MSSigninController {

    @CrossOrigin(origins = {"*", "http://localhost:8082"})
    @RequestMapping(value = "/name", method = RequestMethod.GET)
    public MSResponse sigin(@RequestParam(value = "username") String userName, @RequestParam(value = "userpwd") String userPwd) {
        MSResponse response = new MSResponse();
        MSUser user = null;
        if (null == userName || null == userPwd || userName.length() <= 0 || userPwd.length() <= 0) {
            MSResponseEnum responseEnum = MSResponseEnum.Login4SiginInvalidInfo;
            response.setCode(responseEnum.getCode());
            response.setMsg(responseEnum.getMsg());
        } else {
            user = MSUserUtil.createUser(userName, userPwd);
            MSResponseEnum rspEnum = MSResponseEnum.SUCCESS;
            response.setCode(rspEnum.getCode());
            response.setMsg(rspEnum.getMsg());
        }

        response.setResults(user);

        return response;
    }
}

单元测试

在 IDEA 中新建 SpringBoot 工程后,默认就会创建一个测试目录。

即 test 目录下会有 SpringbootApplicationTests 类文件,其中 pom 文件中已经添加好了 spring-boot-starter-test 启动器。

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
	<scope>test</scope>
</dependency>

springboot-test 包中已经包括了 junit 和 mockito 类库,不需要我们额外再去添加这些库。

借助于 MockMvc 我们可以对接口进行简单的单元测试了。主要的测试核心代码如下:

@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
@SpringBootTest
public class SpringbootApplicationTests {

    @Autowired
    private MockMvc mvc;

    /* 登录的接口测试,GET 请求 */
    @Test
    public void signinTest() throws Exception {
        //直接写接口的映射地址就可以了,不需要写host和port
        String url = "/signin/name?username=itman&userpwd=123";

        MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.get(url)
                .accept(MediaType.APPLICATION_JSON)) //断言返回结果是json
                .andReturn();

        MockHttpServletResponse response = mvcResult.getResponse();
        //HTTP响应的返回码
        int status = response.getStatus();
        //HTTP响应的内容
        String contentAsString = response.getContentAsString();

        System.err.println(status);
        System.err.println(contentAsString);
    }

    /* 注册的接口测试,POST 请求 */
    @Test
    public void signupTest() throws Exception {
        String url = "/signup/name";
        MvcResult mvcResult = mvc.perform(MockMvcRequestBuilders.post(url)
                .accept(MediaType.APPLICATION_JSON)
                .param("username", "itman")
                .param("userpwd", "123567"))
                .andReturn();
        MockHttpServletResponse response = mvcResult.getResponse();
        int status = response.getStatus();
        String contentAsString = response.getContentAsString();
        System.err.println(status);
        System.err.println(contentAsString);
    }
}

在上面编写的测试代码中,解释一下几个用到的注解和类。

1、@RunWith(SpringRunner.class) ,SpringRunner 是 SpringJUnit4ClassRunner 的简写,用于提供测试时的 Spring 应用上下文信息。

2、MockMvc ,MockMvc 是测试 Spring MVC 应用程序的主要入口,为我们的测试提供了一个模拟的应用上下文的环境。

3、@Autowired,可以对类成员变量、方法及构造函数进行标注,完成自动装配。不需要手动创建该对象,这个跟 Spring 的 IOC 机制有关。

代码写好之后,就可以进行单元测试了,直接在 signinTest 或者 signupTest 右键运行即可,不需要启动整个工程。如下图所示:

运行之后,可以在输出的控制台中看到信息:

前端请求

在 跨域和OPTIONS这对欢喜冤家 和 减少跨域中的OPTIONS请求 这两篇文章中,已经跟大家分享过如何在前端页面中进行接口访问了,其中也重点讲解了如何在 SpringBoot 中解决跨域问题,这里不再赘述,感兴趣的朋友可以去看看这两篇文章。

文中的完整示例代码都在 Github 上面,需要的可以自行clone,感谢您的阅读。


临渊羡鱼不如按退而结网~

10 微架构教务系统——用户登录、注销登录、学生注册接口 1、接口概览 2、控制器:LoginController package cn.org.xcore.edusys.controller; import cn.org.xcore.edusys.common.bean.ApiResponse; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImpli... 阅读详情

相关推荐

微服务自动注册到ShenYu网关配置详解

ShenYu客户端配置详解:该配置实现微服务自动注册到ShenYu网关,无需手动配置路由规则。核心配置包括注册类型(HTTP)、Admin地址、认证信息及关键参数contextPath(决定路由前缀)和appName。通过Nacos集中管理,实现服务自动发现和动态路由: 微服务启动后自动向Admin注册 网关自动创建对应选择器和规则 支持全量/上下文两种注册模式 内置安全认证机制 优势:开发无感知、运维自动化、服务动态伸缩,是云原生微服务治理的关键实践。

友莘居士的博客 1274

微服务电商实战(十)登陆接口

CREATE TABLE `u_user_token` ( `user_token_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `token` varchar(255) DEFAULT NULL COMMENT 'token', `login_type` TINYINT (1) DEFAULT NULL COMMENT '...

daziyuanazhen的博客 548

基于OAuth2微服务的登录模块(common模块)

这一章介绍下公共的依赖模块build-common,首先贴出pom依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <

dw147258dw的专栏 894

微服务——单点登录系统

1. 背景 多点登录,访问每个服务都需要重新登陆 2. 概念 登录一个站点后可以免登录其他站点 3. 准备工作 3.1 项目结构 3.2 执行sql脚本 3.3 数据库表结构 3.4 sso-system子工程的依赖 <dependencies> <!--1.数据库访问相关--> <!--1.1 mysql 数据库驱动--> <dependency> <groupI

Pigeon 665

MATLAB新手必看:Stewart平台运动学逆解从入门到实战(附完整代码)

本文详细介绍了如何使用MATLAB实现Stewart平台的运动学逆解,从基础原理到完整代码实现,涵盖并联机器人的数学建模、MATLAB编程和Simulink集成。通过实战案例和可视化分析,帮助新手快速掌握Stewart平台的运动学逆解技术,适用于机器人学和控制理论领域的研究与应用。

dream的博客 551

FAGLB03余额显示异常排查与修复指南

本文针对SAP新总账中FAGLB03报表余额显示异常问题,提供了专业的排查与修复指南。文章深入剖析了数据不一致的核心原因,如FAGLFLEXT汇总表与凭证明细不同步、年度余额结转(FAGLGVTR)失败等,并详细介绍了使用FAGLF03进行精准诊断、通过SE38执行标准调整程序TFC_ADJUST_VZ进行修复的标准操作流程,帮助用户快速恢复数据一致性,确保财务报表的准确性。

weixin_29313423的博客 307

微服务实现网关统一鉴权-接口级别

微服务实现网关统一鉴权-接口级别

weixin_43655425的博客 3767

ADS系列之SI&PI仿真笔记:ADS多种版本的安装、卸载&重装(一)

此系列仅作为ADS学习过程的记录,如有错误的地方还请大佬指正! 一、下载&安装 ADS软件下载&安装还算比较简单,目前接触到有两个版本:ADS2017和ADS2019。这里贴下链接,破解教程里面都有: ADS2017下载地址:https://pan.baidu.com/s/1l-Bs9owKRmp5Pv0Mt92OYA 提取码:wuzf ADS2019下载地址:吴川斌的博客-w...

Claudedy的博客 3万+

实现简单微服务单点登录(SpringSecurity+Gateway+Redis)

一、需求 整个微服务项目有两个服务,一个用户鉴权服务和业务处理服务。基本需求是用户通过鉴权服务进行用户认证操作并返回令牌Token,后续通过token访问业务服务。 二、项目基本结构 - gateway - service - service-user - service-business service-user是用户鉴权服务,主要采用SpringSecurity实现用户鉴权。service-business则是一些业务操作。 gateway主要用于服务分发 三、鉴权服务 用户鉴权服务实现的主要

oNew_Lifeo的博客 3211

TLF35584 窗口看门狗_理论篇

1)看门狗的结果(有效或无效触发)由相关的看门狗故障计数器独立监控。2)窗口看门狗的状态是WWO,它可能有“有效WWD触发”或“无效WWD触发”值。

舊梦的博客 2527

混合整数规划(MIP)在资源优化中的实战应用

本文深入探讨了混合整数规划(MIP)在资源优化中的实战应用,从菜市场采购到工厂调度,再到物流配送和钢铁厂切割问题。通过分支定界法和割平面法等技术,MIP能够有效解决包含整数和连续变量的复杂优化问题,提升企业运营效率。文章还介绍了现代求解器的优化策略和实际项目中的避坑指南,帮助读者更好地应用MIP技术。

weixin_30500105的博客 91

【微服务即时通讯】用户管理子服务2

用户名注册:用户使用昵称和密码进行注册,可选验证码验证。用户名登录:用户使用昵称和密码登录,可选验证码验证,成功返回会话 ID。获取邮箱验证码:向指定邮箱发送验证码,返回验证码 ID 用于后续验证。邮箱注册:用户通过邮箱和验证码完成注册,无需密码。邮箱登录:用户通过邮箱和验证码登录(免密登录),成功返回会话 ID。获取当前用户信息:根据会话 ID 或用户 ID 获取登录用户的详细信息。批量获取用户信息:内部接口,根据用户 ID 列表批量查询多个用户的详细信息。修改头像:上传图片数据更新当前登录用户的头像。

2301_80224556的博客 488

PyTorch实战:3D U-Net医学图像分割从零搭建(附完整代码)

本文详细介绍了如何使用PyTorch从零搭建3D U-Net模型进行医学图像分割,涵盖三维卷积实现、模块化架构设计、医学图像专属优化策略及完整训练流程。通过实战代码演示,帮助开发者掌握UNet-3D在CT、MRI等三维医学图像分割中的应用,提升肝脏肿瘤分割、肺结节检测等任务的准确性。

weixin_29061997的博客 330

Go,你也可以的!-【8.1 登录注册接口】

登录注册在我们的实际业务中是特别常见的东西,本节我们将从需求分析、需求实现等方面与您一起实现一个登录注册的业务流程。 在这之前,如果您还没有接触过前后端的接口开发,那么我们建议您先去了解一下前后端分离的处理流程、请求流程。

Swxctx 800

LVGL 源码分析大全

LVGL 是一款流行的免费和开源嵌入式图形库,为纯C的轻量级GUI框架,支持framebuffer直接渲染图层,因此LVGL能更容易为 MCU、MPU等显示设备开发漂亮的UI。可视化的 UI 编辑器官方上有推荐使用工具。当然,也可以选择 NXP(恩智浦半导体) 提供的工具。........................

Bigan(安)的博客 1万+

在 ABAP 平台上搭建 OAuth 2.0 Server:架构、流程、权限与落地实战

摘要:本文为SAP ABAP开发人员提供将ABAP平台配置为OAuth 2.0授权服务器的实战指南。重点介绍两种授权流程(授权码和SAML Bearer)的实现方案,包括核心事务配置(SOAUTH2/SAML2)、授权对象(S_SCOPE)管理以及端点交互规范。通过具体配置清单和三类典型集成场景(第三方Web应用访问OData、企业集成平台调用、BTP应用对接)的落地示例,帮助读者快速构建安全的OAuth 2.0服务架构。文档强调SSL/TLS基础安全、scope最小授权原则以及授权与令牌端点的标准交互模式

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 313

『Microservices & Nameko』Python 微服务实践

微服务最近一二年非常热门,谈论也比较多,简单的说,微服务将单一应用程序作为由众多小型服务构成之套件加以开发的方式,其中各项服务都拥有自己的进程并利用轻量化机制(通常为HTTP源API)实现通信。下面来一张示例图: Microservices Architecture: 上面2幅图已经形象说明微服务是什么东西了,同时软件部署方式需要建立在容器上。微服务相关生态会在Java和Go语言中比较...

3890

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

超详细解析微服务架构,写得太好了!

作者:古霜卡比 www.cnblogs.com/skabyy/p/11396571.html 本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件。本文侧重于简明地表达微服务架构的全局图景,因此不会涉及具体如何使用组件等细节。 要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。 从单体应用到微服务并不是一蹴而就的,这是一个逐渐演变的过程。本文将以一个网上超市应用为例来说明这一过程。 最初的需求 几年前,.

Java技术栈,分享最主流的Java技术 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringCloud微服务——服务注册和发现

在hm-api模块下新建一个配置类,定义Feign的日志级别:@Bean在上述业务中,包含大量的微服务调用,将被调用的接口全部定义为FeignClient,将其与对应的DTO放在hm-api模块。

qq_51773341的博客 1183

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

微服务:服务的注册与调用和OpenFiegn

微服务:服务的注册与调用和OpenFiegn

安晴晚风的博客 2159

3大关键点教你用Java和Spring Boot快速构建微服务架构:从零开发到高效服务注册与发现的逆袭之路

微服务架构是一种将单一应用程序划分为一组小的、独立服务的架构风格。每个微服务负责特定功能,并通过轻量级的协议(如HTTP REST)进行通信。 在当今快速发展的Java开发领域, 微服务架构因其灵活性、可扩展性及快速迭代能力而受到广泛关注。

忆~遂愿的博客 9953

注册登录的简单概述

注册登录鉴权 1.用户注册 前台需要给我们传递用户名、密码、手机号、手机验证码。验证用户前台传过来的数据是否符合规范,我们使用的Hibernate Validator框架实现的服务端表单校验。短信验证码这块,我们采用的阿里的大于短信接口来做的,我们单独搭建了一个短信微服务,发送的短信请求通过MQ消息由短信微服务消费,进行短信发送。密码我们使用的是Spring提供的BCryptPasswordEncoder加密算法,分成加密和验证两个过程: 加密:算法会对明文密码使用UUID随机生成一个salt,使用salt

ApicESCsa的博客 1万+

SpringCloud微服务02-微服务拆分-注册中心-OpenFeign-网关路由-网关登录校验-配置管理

在网关中定义filter类实现GlobalFilter和Ordered,后者是定义执行顺序的。NettyRoutingFilter设置的是最大的数代表最后执行。对于指定路由过滤器GatewayFilter来说,需要时才看。

qq_52439738的博客 2025

微服务——服务注册和发现(一)

我基于Docker来部署Nacos的注册中心,首先我们需要一张MySQL数据库表,用来存储Nacos的数据。在大型微服务项目中,服务提供者的数量会非常多,为了管理这些服务就引入了。调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除。当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表。当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表。

m0_74197695的博客 1253

登录注册和登录状态维护场景总结(一)

又听了一天白羊....今天分析了一些登录的场景和应用,下一期我会在更新更多的登录和保持登录态的技术实现,也会横向对比一些登录的优缺点,近期准备更新session的原理,加密技术,ThreadLocal深入理解等。

2301_79108772的博客 1713

Day211&212.登录页面模式、整合JWT、整合阿里云短信服务、用户登录注册接口【后端】、用户登录注册【前端】 -谷粒学院

谷粒学院 登录业务模式 用户登录业务介绍 1、单一服务器模式 早期单一服务器,用户认证。通过对session域的设置 session.setAttribute("user",user) session.getAttribute("user") //登录成功后,把用户数据放到session里面 //判断是否登录,从session获取数据,可以获取到是否登录的状态 2. SSO(single sign on)单点登录模式 分布式,SSO(single sign on)模式 优点 : 用户身份信息独立管理,

阿昌爱Java 8438
上一篇: 还有你不知道的Java枚举特性(下篇)
下一篇: 微服务: Swagger 实现在线文档自动化
veryitman
博客等级 码龄16年 472粉丝 310原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值