1.springBoot
1.1.Spring Validation, 对注册接口的参数进行合法性校验
1.1.1.引入Spring Validation 起步依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
1.1.2.在参数前面添加@Pattern注解
1.1.3.在Controller类上添加@Validated注解
例如:
1.1.4.全局异常处理器
//exception/;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleException(Exception e){
e.printStackTrace();
return Result.error(StringUtils.hasLength(e.getMessage())? e.getMessage() : "操作失败");
}
}
1.2.jwt令牌验证
1.2.1.引入Spring Validation 起步依赖
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.4.0</version>
</dependency>
1.2.2.引入utils/JwtUtil工具类
package com.school.moviebooking.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import java.util.Date;
import java.util.Map;
public class JwtUtil {
private static final String *KEY* = "xxls";
public static String genToken(Map<String, Object> claims) {
return JWT.*create*()
.withClaim("claims", claims)
.withExpiresAt(new Date(System.*currentTimeMillis*() + 1000 * 60 * 60 ))
.sign(Algorithm.*HMAC256*(*KEY*));
}
//接收token,验证token,并返回业务数据
public static Map<String, Object> parseToken(String token) {
return JWT.*require*(Algorithm.*HMAC256*(*KEY*))
.build()
.verify(token)
.getClaim("claims")
.asMap();
}
}
1.2.3.例如:根据id和userName生成token
Map<String, Object> claims = new HashMap<>();
claims.put("id",u.getId());
claims.put("username", u.getUserName());
String token = JwtUtil.*genToken*(claims);
1.3.knife4j接口测试
1.3.1.引入knife4j 起步依赖
<!-- http://localhost:8080/doc.html#/home -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.5.0</version>
</dependency>
说明:在浏览器访问进入接口测试界面
http://localhost:8080/doc.html#/home
1.4.电脑内图片通过Spring Boot被浏览器下载
Spring Boot提供了一种简单的方式来处理静态资源,如图片,并允许用户通过HTTP请求来下载这些资源。
以下是一个基本的Spring Boot应用程序示例,它允许用户下载存储在服务器上的图片文件:
首先,确保你的Spring Boot应用程序已经包含了Spring Web依赖,这通常是通过在pom.xml
文件中添加以下依赖实现的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
接下来,创建一个控制器来处理图片下载请求:
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
@RestController
public class ImageDownloadController {
@GetMapping("/download-image")
public void downloadImage(HttpServletResponse response) {
// 图片文件名,确保图片存放在项目的资源目录下(如static或resources文件夹)
String filename = "example-image.png";
// 获取资源文件
Resource resource = new ClassPathResource("static/" + filename);
// 设置HTTP响应的Content-Type和Content-Disposition
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
try {
// 将图片文件的内容输出到HTTP响应中
response.getOutputStream().write(resource.getInputStream().readAllBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
}
在这个控制器中,我们定义了一个/download-image
的GET端点,当用户访问这个URL时,就会触发图片下载。我们使用ClassPathResource
来获取类路径下的资源文件,并将其作为HTTP响应发送给客户端。
最后,确保你的图片文件已经放置在项目的资源目录中,例如src/main/resources/static/
目录下,并且文件名与控制器中指定的文件名相匹配。
现在,当你运行Spring Boot应用程序并访问http://localhost:8080/download-image
时,浏览器就会开始下载名为example-image.png
的图片文件。
请注意,这个例子假设你已经配置了静态资源的映射,Spring Boot默认会将/static/
、/public/
、/resources/
、/META-INF/resources/
等目录下的资源作为静态资源提供服务。如果你的图片存放在其他位置,你可能需要自定义静态资源的映射。
2.springCloud
1.1.RestTemplate远程调用
1.1.1.在配置类创建RestTemplate对象
1.1.2.相关用例
2.2.Eureka注册中心
2.2.1.搭建注册中心
2.2.1.1.引入Eureka-server依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>4.1.1</version>
</dependency>
2.2.1.2.在启动类添加@EnableEurekaServer注解
2.2.1.3.application.yml中编写配置信息
2.2.2.服务注册
2.2.2.1.引入Eureka-Client依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>4.1.1</version>
</dependency>
2.2.2.2.application.yml中编写配置信息
2.2.3.服务发现
2.2.3.1.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口
2.2.3.2.在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解
2.3.Ribbon负载均衡
2.4.Nacos注册中心
2.4.1.Nacos安装
2.4.1.1.Windows安装
开发阶段采用单机安装即可。
2.4.1.1.1.下载安装包
在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases
如图:
windows版本使用nacos-server-1.4.1.zip
包即可。
2.4.1.1.2.解压
将这个包解压到任意非中文目录下,如图:
目录说明:
-
bin:启动脚本
-
conf:配置文件
2.4.1.1.3.端口配置
Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:
修改其中的内容:
启动非常简单,进入bin目录,结构如下:
然后执行命令即可:
-
windows命令:
startup.cmd -m standalone
执行后的效果如图:
2.4.1.1.5.访问
在浏览器输入地址:http://127.0.0.1:8848/nacos即可:
默认的账号和密码都是nacos,进入后:
2.4.1.2.Linux安装
Linux或者Mac安装方式与Windows类似。
2.4.1.2.2.1.安装JDK
Nacos依赖于JDK运行,索引Linux上也需要安装JDK才行。
上传jdk安装包:
上传到某个目录,例如:/usr/local/
然后解压缩:
tar -xvf jdk-8u144-linux-x64.tar.gz
然后重命名为java
配置环境变量:
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
设置环境变量:
source /etc/profile
2.4.1.2.2.2.上传安装包
如图:
上传到Linux服务器的某个目录,例如/usr/local/src
目录下:
2.4.1.2.2.3.解压
命令解压缩安装包:
tar -xvf nacos-server-1.4.1.tar.gz
然后删除安装包:
rm -rf nacos-server-1.4.1.tar.gz
目录中最终样式:
目录内部:
2.4.1.2.2.4.端口配置
与windows中类似
2.4.1.2.2.5.启动
在nacos/bin目录中,输入命令启动Nacos:
sh startup.sh -m standalone
2.5.1.使用配置
2.5.1.1.引入依赖
父工程:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Nacos客户端:
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.5.1.2.在application.yml文件中添加配置
2.6.http客户端Feign
2.6.1.依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>4.1.1</version>
</dependency>
2.6.2.启动类添加注解开启Feign的功能
2.6.3.编写feign客户端
2.7.统一网关Gateway
2.7.1.搭建网关
2.7.1.1.依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-gateway -->
<!-- 网关依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>4.1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<!-- nacos服务发现依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2023.0.0.0-RC1</version>
</dependency>
2.7.1.2.编写路由配置及nacos地址
2.8.RabbitMQ
2.8.1.安装
2.8.1.1.下载镜像
docker pull rabbitmq:3-management
2.8.1.2.运行
docker run \
-e RABBITMQ_DEFAULT_USER=itcast \
-e RABBITMQ_DEFAULT_PASS=123321 \
--name mq \ --hostname mq1 \
-p 15672:15672 \ -p 5672:5672 \
-d \
rabbitmq:3-management
2.9.SpringAMQP
2.9.1.依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-amqp -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>3.2.4</version>
</dependency>
2.9.2.application.yml中添加配置
2.9.3.发送消息用例
2.9.4.接收消息用例
3.0.elasticsearch
4.0.生成SSL证书
keytool -genkey -alias tomcat
keytool -genkey -alias tomcat -keyalg RSA
配置文件
server:
ssl:
key-store: .keystore
key-store-password: abcdef
key-store-type: JKS
key-alias: tomcat
http-port: 8080
port: 8081
配置类
package com.example.demo.config;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MvcConfiguration {
@Value("${server.port}")
private int sslPort;//https的端口
@Value("${server.http-port}")
private int httpPort;//http的端口
@Bean
public TomcatServletWebServerFactory servletContainerFactory() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
//设置安全性约束
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
//设置约束条件
SecurityCollection collection = new SecurityCollection();
//拦截所有请求
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
//设置将分配给通过此连接器接收到的请求的方案
connector.setScheme("http");
//true: http使用http, https使用https;
//false: http重定向到https;
connector.setSecure(false);
//设置监听请求的端口号,这个端口不能其他已经在使用的端口重复,否则会报错
connector.setPort(httpPort);
//重定向端口号(非SSL到SSL)
connector.setRedirectPort(sslPort);
tomcat.addAdditionalTomcatConnectors(connector);
return tomcat;
}
}
5.0.定制Banner
这是默认的启动图标
我们可以在src/main/resources下新建一个banner.txt文件
通过
Text to ASCII Art Generator (TAAG) (patorjk.com)
网站生成字符,将网站生成的字符复制到banner.txt文件中,再次启动时,图案改变
期待更新~~~~