SpringCloud-Gateway微服务校验登录
SpringCloud-Gateway微服务校验登录登录流程分析在原来的单体服务中,我们可以定义一个拦截器或者过滤器来拦截用户携带的认证信息,并且每个service可以很方便的获取到登录的用户信息。
但是在微服务的场景之下,需要在每一个微服务中都去配置解析token的拦截器,这并不安全且不现实。既然我们需要做登录校验,但是又不希望在每一个微服务中都重复的做登录校验,那我们就可以将这个工作交给我们的网关,GateWay。
此时我们登录校验的流程则变成了:
前端携带jwt令牌发起请求到网关
网关在请求路由之前做jwt令牌校验
后续的微服务需要使用到用户信息,则需要将用户信息传递到具体的微服务
微服务之间可能会发生调用,也需要将用户信息传递到其他微服务
代码实现网关GlobalFilter1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 ...
内网穿透工具cpolar使用步骤
内网穿透工具cpolar使用步骤进入cpolar官网cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站
点击免费试用后,注册并登录账号
完成账号注册之后下载安装cpolar
打开Cpolar Web UI
创建隧道
查看隧道
隧道启动后即可通过公网地址访问
测试我在本地起了一个8080端口的服务,编写了一个简单的接口用于测试
12345678@RestController@RequestMapping("/demo")public class DemoController { @GetMapping public String demo() { return "Hello Cpolar"; }}
通过localhost访问可以看到服务正常
再通过公网地址访问
可以看到正常返回了,内网穿透就生效了。
Java获取音视频文件的时长
Java获取上传音视频文件的时长导入依赖12345678910111213<!-- mp3文件支持(如语音时长)--><dependency> <groupId>org</groupId> <artifactId>jaudiotagger</artifactId> <version>2.0.1</version></dependency><!-- mp4文件支持(如语音时长)--><dependency> <groupId>com.googlecode.mp4parser</groupId> <artifactId>isoparser</artifactId> <version>1.1.22</version></dependency>
工具类代码12345678910111213141516171819202122232425262 ...
枚举类中获取spring容器的bean
枚举类中获取spring容器的bean我们有一个枚举,想要注入spring容器中的bean。通过直接标记这个类为Component,注入bean的方式往往是行不通的,这是因为枚举的常量在类加载时就已经初始化了。此时可以通过定义一个静态内部类来实现bean的注入。
定义一个接口及其实现类123public interface Car { void run();}
1234567@Component("toyotaCar")public class ToyotaCar implements Car { @Override public void run() { System.out.println("Toyota car is running"); }}
1234567@Component("ferrariCar")public class FerrariCar implements Car { @Overrid ...
mybatis-plus常用注解
@TableName该注解用于指定实体类对应的数据库表名。当实体类名与数据库表名不一致,或者实体类名不是数据库表名的驼峰写法时,您需要使用这个注解来明确指定表名。
12345678910111213@TableName("sys_user")public class User { private Long id; private String name; private Integer age; private String email;}
value类型: String默认值: ""
指定实体类对应的数据库表名。如果实体类名与表名不一致,使用这个属性来指定正确的表名。
schema类型: String默认值: ""
指定数据库的 Schema 名称。通常情况下,如果你的数据库没有使用 Schema 来组织表,这个属性可以不填写。
keepGlobalPrefix类型: boolean默认值: false
当全局配置了 tablePrefix 时,这个属性决定是否保持使用全局的表 ...
获取Springboot 项目中resource目录中的文件
工具类代码如下1234567891011121314151617181920212223242526272829public File readFile(String filename) { try { // 获取资源文件的输入流 URL resourceUrl = ResourceReader.class.getResource(filename); if (resourceUrl == null) { throw new RuntimeException("resourceUrl is null"); } // 将资源文件内容读取到临时文件 return createTempFileFromResource(resourceUrl); } catch (IOException e) { log.error("读取资源文件出错", e); ...
Java获取所有类的class对象
Java获取所有类的class对象今天需求需要获取到项目里所有所有类的class对象,查阅了一番资料后写了一个工具类,如下。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161package com.xiaoyun.utils;import com.xiaoyun.annotation.Quart ...
CSS的编写位置
行内样式
写在标签的style属性中。行内样式又称内联样式
1<h1 style="color: red;font-size: 90px">你好呀,小云</h1>
注意点:
行内样式只能作用于当前标签,其他标签不生效
style属性的值不能随便写,要遵循CSS的语法规范,是键:值对的格式
存在的问题
编写繁琐,不易维护,CSS代码难以复用
没有体现样式与结构分离的思想。仅在给元素添加简单样式的时候使用
内部样式
写在style标签中,style标签可以放在html文件中的任何位置,但是一般放在head标签中
12345678910111213141516<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>位置2_内部样式</title> <style> h1 { c ...
springboot JSON格式化配置
Spring boot json序列化的配置先贴配置这段配置配置了Long类型和时间类型的序列化配置
123456789101112131415161718192021/** * 自定义json序列化 */@Beanpublic Jackson2ObjectMapperBuilderCustomizer customizer() { return builder -> builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss") // long类型转string, 前端处理Long类型,数值过大会丢失精度 .serializerByType(Long.class, ToStringSerializer.instance) .serializerByType(Long.TYPE, ToStringSerializer.instance) .s ...













