文章目录

  • 一、创建spring boot项目
    • 1、使用idea创建springboot项目:
    • 2、勾选需要的依赖库
    • 3、pom文件示例
    • 4、配置application.yml
  • 二、配置MyBatis
    • 1、安装插件
    • 2、创建IDEA数据库连接
    • 3、配置MyBatis
    • 4、自动生成
  • 三、自定义异常类
    • 1. 创建 com.buba.wechatmini.exception 包
    • 2. 创建WechatminiException类
  • 四、封装Web返回对象
    • 1、添加依赖库
    • 2、创建 com.buba.wechatmini.common.utils包,然后创建 Result 类
  • 五、利用Swagger搭建 REST API
    • 1、添加依赖库
    • 2、创建Swagger配置类
    • 3、配置yml
    • 4、编写测试Web接口
    • 5、测试Web接口
  • 六、配置后端验证功能
  • 七、抵御即跨站脚本(XSS)攻击

一、创建spring boot项目

1、使用idea创建springboot项目:

2、勾选需要的依赖库

3、pom文件示例

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.buba</groupId><artifactId>WeChatMiNi</artifactId><version>0.0.1-SNAPSHOT</version><name>WeChatMiNi</name><description>WeChatMiNi</description><properties><java.version>13</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><!--        <dependency>--><!--            <groupId>org.springframework.boot</groupId>--><!--            <artifactId>spring-boot-starter-data-mongodb</artifactId>--><!--        </dependency>--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--        <dependency>--><!--            <groupId>org.springframework.amqp</groupId>--><!--            <artifactId>spring-rabbit</artifactId>--><!--            <version>3.0.1</version>--><!--        </dependency>--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.15</version></dependency><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.3.0</version></dependency><!--shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring-boot-starter</artifactId><version>1.5.3</version></dependency><!--hutool jar--><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.0.7</version></dependency><!--考虑到Hutool的非强制依赖性,因此zxing需要用户自行引入--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.5</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

4、配置application.yml

spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedruid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3307/WeChatMiNi?useUnicode=true&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456initial-size: 8max-active: 16min-idle: 8max-wait: 60000test-while-idle: truetest-on-borrow: falsetest-on-return: falsedata:redis:database: 0host: localhostport: 6379password:jedis:pool:max-active: 1000max-wait: -1msmax-idle: 16min-idle: 8main:allow-bean-definition-overriding: truemybatis:mapper-locations: classpath*:mappers/*.xmltype-aliases-package: com.buba.wechatmini.pojoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #输出日志规则map-underscore-to-camel-case: true #支持驼峰命名
logging:level:root: infocom.example.emos.wx.db.dao : warnpattern:console: "%d{HH:mm:ss} %-5level %msg%n"WeChatMiNi:jwt:#密钥secret: buba123456#令牌期时间expire: 7#令牌缓存时间(天)cache-expire: 10

二、配置MyBatis

1、安装插件

2、创建IDEA数据库连接


3、配置MyBatis

mybatis:mapper-locations: classpath*:mappers/*.xmltype-aliases-package: com.buba.wechatmini.pojoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #输出日志规则map-underscore-to-camel-case: true #支持驼峰命名
logging:level:root: infocom.example.emos.wx.db.dao : warnpattern:console: "%d{HH:mm:ss} %-5level %msg%n"

4、自动生成

三、自定义异常类

因为后台Java项目是Web工程,所以有异常消息,我们要在原有异常消息的基础之上,封装状态
码,所以需要我们自己创建一个异常类。
自定义异常类继承的父类,我没有选择Exception。因为Exception类型的异常,我们必须要手动
显式处理,要么上抛,要么捕获。我希望我定义的异常采用既可以采用显式处理,也可以隐式处
理,所以我选择继承RuntimeException这个父类。RuntimeException类型的异常可以被虚拟机隐
式处理,这样就省去了我们很多手动处理异常的麻烦。

1. 创建 com.buba.wechatmini.exception 包

2. 创建WechatminiException类

package com.buba.wechatmini.exception;/*** @author qlx*/
public class WechatminiException extends RuntimeException{private String msg;private int code = 500;public WechatminiException(String msg) {super(msg);this.msg = msg;}public WechatminiException(String msg, Throwable e) {super(msg, e);this.msg = msg;}public WechatminiException(String msg, int code) {super(msg);this.msg = msg;this.code = code;}public WechatminiException(String msg, int code, Throwable e) {super(msg, e);this.msg = msg;this.code = code;}}

四、封装Web返回对象

虽然SpringMVC的Controller可以自动把对象转换成JSON返回给客户端,但是我们需要制定一个
统一的标准,保证所有Controller返回的数据格式一致。最简便的办法就是定义封装类,来统一封
装返回给客户端的数据。

1、添加依赖库

修改 pom.xml 文件,添加依赖库。 Apache 的 httpcomponents 库里面的 HttpStatus 类封装了
很多状态码,所以我们在Web返回对象中封装状态吗,可以用到这些状态码。

        <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.13</version></dependency>

2、创建 com.buba.wechatmini.common.utils包,然后创建 Result 类

package com.buba.wechatmini.common.utils;import org.apache.http.HttpStatus;import java.util.HashMap;
import java.util.Map;/*** @author qlx*/
public class Result extends HashMap<String, Object> {public Result() {put("code", HttpStatus.SC_OK);put("msg", "success");}public static Result error() {return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "未知异常,请联系管理员");}public static Result error(String msg) {return error(HttpStatus.SC_INTERNAL_SERVER_ERROR, msg);}public static Result error(int code, String msg) {Result r = new Result();r.put("code", code);r.put("msg", msg);return r;}public static Result ok(String msg) {Result r = new Result();r.put("msg", msg);return r;}public static Result ok(Map<String, Object> map) {Result r = new Result();r.putAll(map);return r;}public static Result ok() {return new Result();}@Overridepublic Result put(String key, Object value) {super.put(key, value);return this;}
}

五、利用Swagger搭建 REST API

开发前后端分离架构的项目,往往调试后端Web接口需要用到POSTMAN工具。虽然POSTMAN
工具的功能非常强大,但是请求参数很多的情况下,我们手写这些参数和数据还是非常麻烦的。
因此我们需要一个调试后端Web接口更加简便的方法。恰好Swagger提供了REST API调用方
式,我们不需要借助任何工具的情况下,访问Swagger页面,就可以对Web接口进行调用和调
试,这种调试方式的效率要远超POSTMAN软件。

1、添加依赖库

在 pom.xml 文件中添加Swagger依赖库,这里我们使用的是Swagger2版本,在UI方面,比
Swagger1版本要好看很多。

         <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency>

2、创建Swagger配置类

package com.buba.wechatmini.common.utils;/*** @author qlx*/import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;import java.util.ArrayList;
import java.util.List;@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket createRestApi() {Docket docket = new Docket(DocumentationType.SWAGGER_2);// ApiInfoBuilder 用于在Swagger界面上添加各种信息ApiInfoBuilder builder = new ApiInfoBuilder();builder.title("BUBA在线办公系统");ApiInfo apiInfo = builder.build();docket.apiInfo(apiInfo);// ApiSelectorBuilder 用来设置哪些类中的方法会生成到REST API中ApiSelectorBuilder selectorBuilder = docket.select();selectorBuilder.paths(PathSelectors.any()); //所有包下的类//使用@ApiOperation的方法会被提取到REST API中selectorBuilder.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class));docket = selectorBuilder.build();/** 下面的语句是开启对JWT的支持,当用户用Swagger调用受JWT认证保护的方法,* 必须要先提交参数(例如令牌)*///存储用户必须提交的参数List<ApiKey> apikey = new ArrayList();//规定用户需要输入什么参数apikey.add(new ApiKey("token", "token", "header"));docket.securitySchemes(apikey);//如果用户JWT认证通过,则在Swagger中全局有效AuthorizationScope scope = new AuthorizationScope("global", "accessEverything");AuthorizationScope[] scopeArray = {scope};//存储令牌和作用域SecurityReference reference = new SecurityReference("token", scopeArray);List refList = new ArrayList();refList.add(reference);SecurityContext context =SecurityContext.builder().securityReferences(refList).build();List cxtList = new ArrayList();cxtList.add(context);docket.securityContexts(cxtList);return docket;}
}

3、配置yml

Springboot2.6以后将SpringMVC 默认路径匹配策略从AntPathMatcher 更改为PathPatternParser,导致出错如下:
ERROR Application run failed org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

解决上述问题需要application.yml配置如下

spring:mvc:pathmatch:matching-strategy: ant_path_matcher

4、编写测试Web接口

package com.buba.wechatmini.controller;import com.buba.wechatmini.common.utils.JwtUtil;
import com.buba.wechatmini.common.utils.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;/*** @author qlx*/
@RestController
@RequestMapping("/test")
@Api("测试Web接口")
public class TestController {@Autowiredprivate JwtUtil jwtUtil;@ApiOperation("最简单的测试方法")@GetMapping("/get1")public Result get1(){Map map = new HashMap();map.put("msa","aaaaaaa");return Result.ok(map);}@RequestMapping(value = "/getToken",method = RequestMethod.OPTIONS)public Result getToken() throws UnsupportedEncodingException {Map map = new HashMap();map.put("token",jwtUtil.createToken(123));return Result.ok(map);}
}

5、测试Web接口

浏览器访问地址:http://127.0.0.1:8080/swagger-ui.html

六、配置后端验证功能

七、抵御即跨站脚本(XSS)攻击

小程序(一)后端项目搭建相关推荐

  1. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...

    转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...

  2. (微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好

    转载地址:(微信小程序)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 作者:Happy王子乐 个人网站(整理 ...

  3. H5盲盒商城网站源码开发小程序抽奖系统商城搭建 VUE+PHP后台项目

    这是H5盲盒商城网站源码开发小程序抽奖系统商城搭建 VUE+PHP后台项目(代码不加密,开源) 1.带推广二维码功能 2.含充值3级分销功能 3.盲盒回收成余/额功能 等功能 可以个性化定制开发等 源 ...

  4. 最新版养猫小程序前端+后端搭建详细教程

    准备工作: 1.云服务器 2.备案域名 3.下载前端+后端源码:下载 4.微擎源码 5.注册微信小程序:https://mp.weixin.qq.com/ 6.下载微信开发者工具:点击下载 教程第一步 ...

  5. 小程序的豆瓣项目练习

    小程序的豆瓣项目: ​ 一. tabbar的布局实现 ​ 需要创建 pages/welcome board list item search mine ​ 全局配置 -> tabBar ​ ap ...

  6. 微信小程序开发15 项目实战 基于云开发开发一个在线商城小程序

    在学完前 4 个模块之后,我相信你会对微信小程序的开发有一个全新的认识.在前面 3 个模块中,俊鹏分别从微信小程序内在的运行原理,小程序工程化开发以及具体实践层面,深度讲解了微信小程序开发所必要的知识 ...

  7. 实验室预约管理小程序前后端完整,包括实验室动态,实验室规章制度,预约审批,用户管理,基础实验室预约,专业实验室预约等功能

    功能介绍 实验室预约管理小程序前后端完整,包括实验室动态,实验室规章制度,预约审批,用户管理,基础实验室预约,专业实验室预约等功能.目前部分高校实验室存在设备管理困难的问题,要使用设备可能需要在微信群 ...

  8. 小程序开发及环境搭建及发布

    一.小程序开发及环境搭建 1.下载Hbuild X https://www.dcloud.io/hbuilderx.html 2.下载腾讯开发工具 https://q.qq.com/wiki/tool ...

  9. 微信小程序与后端Java接口交互-图书搜索实现

    完整微信小程序(Java后端) 技术贴目录清单页面(必看) 我们模拟实现一个微信小程序端关键字图书,然后显示图书列表的功能,如下图: 实现大体思路,前端用户输入关键字,通过bindtap事件,事件里得 ...

  10. 微信运动步数:小程序+Java后端,源码可下载

    微信运动步数:小程序+Java后端 更多资源:www.jeeweixin.com 功能说明: 1.获取和展示用户的微信运动步数,计算卡路里: 2.用户打开小程序即可实现步数打卡入库: 3.通过日历展示 ...

最新文章

  1. 记数据结构MOOC-二叉树
  2. 编写一个程序,开启3个线程,这3个线程的ID分别为A、B、C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示;如:ABCABC….依次递推。
  3. python用turtle画皮卡丘_用Python的turtle作画(2)——皮卡丘
  4. Spring Boot使用自定义的properties
  5. Java基础回顾Application(二)
  6. qt Graphic View 学习
  7. 构建词表与抽样——【torch学习笔记】
  8. pp助手可以刷机吗android,如何使用PP助手进行刷机?
  9. qt 二维数组初始化_C++数组初始化方法
  10. Linux的 ls 和 ll 的使用发放、基本区别
  11. Codeforces Contest 730 A Toda 2 —— 贪心
  12. 字节跳动年薪百万的测试开发=“半个产品+半个开发”?
  13. 石溪分校 计算机研究生专业,纽约州立大学石溪分校计算机科学硕士入学条件.pdf...
  14. 轻量级图像分类模型-MobileNetV3阅读笔记
  15. Android初识-Intent用法进阶篇
  16. Spring context:annotation-config/ 解说
  17. 2022年全球市场菱镁矿和水镁石总体规模、主要生产商、主要地区、产品和应用细分研究报告
  18. 湖南省计算机等级考试(二级)题库 第四部分
  19. 《python灰帽子》笔记四
  20. 国内垃圾渗滤液处理主要用什么手段呢?垃圾渗滤液的处理市场前景有吗?

热门文章

  1. Android版本与Linux内核版本的关系
  2. ODT在手,DDR5布线可以任性走?
  3. 原生js方法购物车完整实现 利用localStorage
  4. Linux vmstat 命令详解
  5. quadro显卡好在哪
  6. Evaluations
  7. 输出青蛙跳台所有路径
  8. redis主从配置(一主多从)
  9. torch.onnx.export详细介绍
  10. Idea创建JavaEE项目