如何使用Spring Boot从0到1搭建一个Java后台(一)

来源:互联网 发布:如何制作淘宝宝贝长图 编辑:程序博客网 时间:2024/05/20 00:14

关于如何使用Spring Boot从0到1搭建一个Java后台,主要分为三篇文章来介绍:第一篇文章主要介绍搭建一个Java后台需要的相关技术;第二篇文章主要介绍如何使用代码来实现一个完整的后台接口;第三篇文章主要介绍自己在写一个简单java后台项目遇到的一些问题。本篇为第一篇文章。

在写这个Java后台项目的时候,使用了Spring Boot来进行开发,里面采用了Spring MVC的架构风格,使用了Restful来设计对应的Api接口,使用了AES加密与解密算法来实现接口的安全与加密,使用了Mybatis来操作Mysql数据库,使用了单元测试和集成测试来验证接口是否正确。下面就简单介绍下对应的技术。

Spring Boot

大部分Spring Boot应用只需要简单的Spring配置就可以了,而一般的Spring应用则需要很多的配置,比如Spring MVC应用,需要配置dispathcerServlet,需要配置applicationContext.xml、springmvc-config.xml等,还需要添加Spring MVC所依赖的各种jar包。但是在Spring Boot应用中这些都是不需要配置的。我们来创建一个简单的Spring Boot项目,来说明其配置的简单性。

第一步,打开IntelliJ IDEA工具,选择maven,创建一个maven项目出来,项目创建好后如下图所示:

Spring-boot 1-1.png

第二步,打开pom.xml,加入以下依赖配置,如下所示:

<repositories>    <repository>        <id>maven-snapshots</id>        <url>http://maven.aliyun.com/nexus/content/groups/public</url>        <snapshots><enabled>false</enabled></snapshots>    </repository></repositories><!-- Inherit defaults from Spring Boot --><parent>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-parent</artifactId>    <version>1.5.8.RELEASE</version>    <relativePath/> <!-- lookup parent from repository --></parent><properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>    <java.version>1.8</java.version></properties><dependencies>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>    </dependency>    <!-- Add typical dependcies for a web application -->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency></dependencies><!-- Package as an executable jar --><build>    <plugins>        <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>        </plugin>    </plugins></build>

第三步,创建一个ArticleSpringBootApplication类,配置main函数,如下图所示:

spring-boot 1-2.png

第四步,创建一个HelloController类,实现Hello World的输出,如下图所示:

spring-boot 1-3.png

第五步,点击ArticleSpringBootApplication旁边的run,运行整个项目,看到如下输出,则说明Spring Boot项目已经成功启动:

spring-boot 1-4.png

第六步,打开浏览器,在地址栏输入http://localhost:8080/hello,就会打印出Hello World,如下图所示:

spring-boot 1-5.png

通过这个例子,我们可以看出在整个Spring Web项目中,我们只是简单地在pom.xml中加入了一些简单的依赖,这相比于传统的web项目创建无疑是简单了许多。为什么Spring Boot的配置这么简单呢?这是因为spring-boot-starter-parent起到了关键的作用。因为Spring项目中的许多配置都默认从spring-boot-starter-parent中继承过来的,这大大减少了spring项目的配置,这也是我为什么选择使用Spring Boot来实现Java后台项目的原因。

更多关于Spring Boot的介绍,可以参考官方文档给出的介绍,链接如下所示:

英文文档

中文文档

REST

REST是一种分布式应用的架构,也是一种大流量分布式应用的设计方法论。REST的英文全称为Representational State Transfer,翻译成中文就是表现层状态转换。要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词都代表了什么涵义,把这个搞懂了,就能理解REST是一种什么样的设计。关于如何理解REST,可以参考阮一峰老师的这篇文章。

引用一下阮一峰老师总结的RESTful架构:

  • 每一个URI代表一种资源。
  • 客户端和服务器之间,传递这种资源的某种表现层。
  • 客户端通过四个HTTP动词,对服务器端资源进行操作,实现表现层状态转化。

理解完什么是RESTful架构后,我们看下在设计RESTful Api需要注意的地方,最常见的错误就是URI中包含动词。因为资源表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。比如某个URI为/hrm/users/show,其中show为动词,这样设计出来的URI就错误了。这个URI的目的是查询用户的列表,但是在URI中不应该出现show动词,而是应该通过HTTP的GET方法表示show,所以正确的URI应该为GET /hrm/users。下面通过一个简单的例子来说明下HTTP中的5种动作请求。

GET /hrm/users 查询用户的列表POST /hrm/users 增加一个用户DELETE /hrm/users/id 删除一个用户PUT /hrm/users/id 更新一个用户(提供该用户的全部信息)PATCH /hrm/users/id 更新一个用户(提供该用户的部分信息)

更多关于Restful Api设计可以参考阮一峰老师的另外一篇文章。

Mybatis

关于Mybatis的介绍与使用可以参考我之前写的Mybatis使用介绍这篇文章,下面介绍下在Spring Boot中如何使用Mybatis。打开pom.xml加入以下依赖:

    <!-- Mybatis集成 -->    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>        <version>5.1.30</version>    </dependency>    <dependency>        <groupId>org.mybatis.spring.boot</groupId>        <artifactId>mybatis-spring-boot-starter</artifactId>        <version>1.3.1</version>    </dependency>

再打开application.properties加入JDBC配置就可以了,如下所示:

# JDBC配置spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/ddn_hrm_db?useUnicode=true&characterEncoding=utf8spring.datasource.druid.username=rootspring.datasource.druid.password=spring.datasource.driver-class-name=com.mysql.jdbc.Driver

这样mybatis的配置就完成了,mybatis的具体使用会在我的下篇文章中有详细的介绍。

接口安全与加密

现在大部分后台接口都采用RESTful架构,RESTful Api的身份证应该使用OAuth2.0框架,也就是说客户端在每次请求时都要带上身份验证信息,实现上,大部分都采用token的认证方式,一般流程如下所示:

  1. 用户登录成功后,服务器端返回token和refreshToken给客户端。
  2. 客户端把token、refreshToken保存到本地,以后发送的每个请求,都将token发回服务器端。
  3. 服务器端检查token的有效性,有效则返回数据,若无效,分为两种情况:
    • token错误,用户需要重新登录,获取正确的token。
    • token过期,用户重新登录,使用refreshToken重新获得token。

使用OAuth2.0进行api身份验证,比较适合对外提供的api,对于公司内部的api,一般采用接口加密的方法来进行实现。在这个Java后台项目中,就是采用的接口加密的方法,主要用到了md5加密算法和AES加密算法。

MD5算法是典型的消息摘要算法,常用于验证数据的完整性,是数字签名算法的核心算法。其前身有MD2、MD3和MD4算法,它由MD4、MD3、MD2算法改进而来。不论哪一种MD算法,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。因为MD5算法常用于验证数据的完整性,所以客户端在发送一个请求的时候,客户端对请求所传的参数进行MD5计算从而得到一个sign签名,传递给服务器端。服务器端,拿到客户端传递过来的参数再次进行MD5计算得到一个新的sign签名。如果客户端传递过来的sign签名和服务器端计算出来的sign签名相等,则说明数据是完整性的,否则,数据在传输的过程中已经被篡改了。

AES加密算法是对称加密算法,AES算法因密钥建立时间短、灵敏性好、内存需求低等优点,应用的比较广泛,并且目前采用的AES算法能够有效抵御已知的针对DES算法的所有攻击方法。在上面我们只是对参数进行MD5计算得到一个sign签名,用来校验数据是否完整性,但是数据在传输的过程中,我们还要对传输的数据进行下AES加密,这样就能够有效地提高接口的安全性

更多关于加密算法的内容,可以去这里下载下Java加密与解密的艺术 提取密码:6j4v

参考文章:

App架构设计经验:接口的设计

测试

Spring Boot提供了一系列的工具和注解来测试你的应用,主要通过以下两个组件来进行实现。

  • spring-boot-test 包含了核心的部分。
  • spring-boot-test-autoconfigure 支持自动配置。

对于大部分的开发者会使用spring-boot-starter-test,它里面包含了JUnit、AssertJ、Hamcrest组件以及其他许多有用的库。其中JUnit主要用于进行单元测试,Spring Test和Spring Boot Test主要用于集成测试。

想更多了解测试的内容,可以参考下面两篇文章:

Spring-boot-reference关于Testing的那部分

JUnit入门概述

总结

这篇文章主要就讲了下自己在写这个Java后台项目时用到了哪些技术,看了哪些文章,整理了下,希望对刚开始学习Java后台开发的人有所帮助。我会在第三篇文章的时候,把自己写的这个简单的Java后台项目给开源出来,到时欢迎大家关注。

阅读全文
0 0
原创粉丝点击