《译见》系列“构建用户管理微服务”已经向大家连载了六期,我们从零起步已经成功开发出用户管理应用程序的构建模块。在最后一部分,将向大家展示如何将之前的所学合而为一,来让应用程序正常地运行下去。
毫无疑问的,建立 Spring-based 应用程序最简单的方法便是使用 Spring Boot。因为使用它比在原生 Spring 使用起来更加有效, 所以它被大量的采用 。我曾在各种情况下使用 Spring , 并在 servlet 容器和完全成熟的 Java EE 应用程序服务器上构建应用程序, 但能够将所有内容打包在可执行捆绑包中能极大地降低开发成本。
总而言之,第一步是为应用程序创建一个新的模块,即为 springuni-auth-boot 。
<?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 端点,它还将 s pringuni-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/