译见 | 构建用户管理微服务(终章):合而为一

译见

《译见》系列“构建用户管理微服务”已经向大家连载了六期,我们从零起步已经成功开发出用户管理应用程序的构建模块。在最后一部分,将向大家展示如何将之前的所学合而为一,来让应用程序正常地运行下去。

unnamed

创建一个独立的可执行模块

毫无疑问的,建立 Spring-based 应用程序最简单的方法便是使用 Spring Boot。因为使用它比在原生 Spring 使用起来更加有效, 所以它被大量的采用 。我曾在各种情况下使用 Spring , 并在 servlet 容器和完全成熟的 Java EE 应用程序服务器上构建应用程序, 但能够将所有内容打包在可执行捆绑包中能极大地降低开发成本。

总而言之,第一步是为应用程序创建一个新的模块,即为 springuni-auth-boot

Maven 配置

<?xml version="1.0" encoding="UTF-8"?><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 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>springuni-particles</artifactId>
    <groupId>com.springuni</groupId>
    <version>1.0-SNAPSHOT</version>
  </parent>

  <artifactId>springuni-auth-boot</artifactId>

  <name>SpringUni Auth User Boot</name>
  <description>Example module for assembling user authentication modules</description>

  <dependencies>
    <dependency>
      <groupId>com.springuni</groupId>
      <artifactId>springuni-auth-rest</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>com.springuni</groupId>
      <artifactId>springuni-auth-user-jpa</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    </dependency>

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

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <!-- https://github.com/spring-projects/spring-boot/issues/6254#issuecomment-229600830 -->
        <configuration>
          <classifier>exec</classifier>
        </configuration>
      </plugin>
    </plugins>
  </build></project>

Springuni-auth-rest 提供用于用户管理的 REST 端点,它还将 springuni-auth-model 作为传递依赖。springuni-auth-user-jpa 负责持久化用户数据,并在之后将替换其他持久性机制。

第三个依赖是 MySQL 连接器,且它可以根据需求进行替换。

Spring Boot 的角度来说,一下两个依赖关系是非常重要的:spring-boot-starter-web 和 spring-boot-starter-tomcat 。我们需要用它们来创建 Web 应用程序。

应用程序的接入口

import com.springuni.auth.domain.model.AuthJpaRepositoryConfiguration;import com.springuni.auth.domain.service.AuthServiceConfiguration;import com.springuni.auth.rest.AuthRestConfiguration;import com.springuni.auth.security.AuthSecurityConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Import;

@SpringBootApplication
@Configuration
@Import({
    AuthJpaRepositoryConfiguration.class,
    AuthServiceConfiguration.class,
    AuthRestConfiguration.class,
    AuthSecurityConfiguration.class})public class Application {  public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
  }

}

在没有 Spring Boot 的情况下执行一下步骤会非常吃力(必须在web.xml中注册上下文监听器且为应用程序设置容器)

这几乎是一个虚拟模块且所有重要的举措都将归结为必须导入一些 Java-based Spring 配置类。

启动

Spring Boot 附带了一个非常有用的 Maven 插件,它可以将整个项目重新打包成一个可以进行执行的 über JAR。它同样也可以在本地启动项目。

mvn -pl springuni-auth-boot spring-boot:run

测试驱动用户管理应用程序

第一部分定义了所有可用的 REST 端点,现在用一些用例来对他们进行测试。

注册新用户

curl -H 'Content-Type: application/json' -XPOST http://localhost:5000/users -d \
'{
 "screenName":"test2",
 "contactData": {
   "email": "test2@springuni.com"
 },
 "password": "test"
}'
HTTP/1.1 200

首次登陆尝试

此时进行首次登陆尝试会失败,因为未确认用户账号。

curl -D- -XPOST http://localhost:5000/auth/login -d '{ "username":"test5", "password": "test" }' 
HTTP/1.1 401 
{
 "statusCode" : 401,
 "reasonPhrase" : "Unauthorized"
}

确认账号

一般情况下,用户最终会收到一封附带确认链接的电子电子邮件,点击链接会启动如下的请求。

curl -D- -XPUT http://localhost:5000/users/620366184447377/77fc990b-210c-4132-ac93-ec50522ba06f
HTTP/1.1 200

第二次登陆尝试

用户的电子邮箱地址确认后,即可登录。

curl -D- -XPOST http://localhost:5000/auth/login -d '{ "username":"test5", "password": "test" }'
HTTP/1.1 200
X-Set-Authorization-Bearer: eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiI2MjA1OTkwNjIwMTQ4ODEiLCJzdWIiOiI2MjAzNjYxODQ0NDczNzciLCJleHAiOjE0OTcxMDQ3OTAsImlhdCI6MTQ5NzAxODM5MCwiYXV0aG9yaXRpZXMiOiIifQ.U-GfabsdYidg-Y9eSp2lyyh7DxxaI-zaTOZISlCf3RjKQUTmu0-vm6DH80xYWE69SmoGgm07qiYM32JBd9d5oQ

下一步是什么?

正如我之前提到的,这个应用程序有很多工作要做。其中还有一些基本功能,也没有UI。您可以按照以下步骤进行: https://github.com/springuni/springuni-particles/projects/1

原文链接:https://www.springuni.com/user-management-microservice-part-7/

DaoCloud 公司简介:「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云原生操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 400 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。

未经允许不得转载:DaoCloud道客博客 » 译见 | 构建用户管理微服务(终章):合而为一

申请试用