Spring Cloud Gateway实现指定路由跳过全局过滤器
在Spring Cloud Gateway中GlobalFilter可以方便的全局拦截或统计,有时候希望在某些路由中可以跳过GlobalFilter,可以通过GatewayFilter与GlobalFilter组合来实现。
1、全局过滤器GlobalFilter详细代码如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283package com.chanjet.dsf.web.filter;import com.alibaba.fastjson.JSON;import com.chanjet.dsf.cache.RedisUtil;import com.chanjet.dsf.constant.AttrbuteConstant;import com.chanjet.dsf.constant.ResultCodeEnum;i ...
Spring Boot集成Mybatis实现多数据源支持
1、背景在实际项目开发过程中,时不时会遇到多数据源的情况,本文详细介绍下Spring Boot集成Mybatis实现多数据源支持。
2、集成过程工程结构首先代码工程结构如下: org.spring.springboot.config.datasource 包含了多数据源的配置,同样有第三个数据源,按照前几个复制即可;resources/mapper目录下面有两个模块,分别是 Mybatis 不同数据源需要扫描的mapper.xml 目录。
1234567891011121314151617181920212223242526272829303132├── pom.xml└── src └── main ├── java │ └── com │ └── clang │ ├── Application.java │ ├── config │ │ └── datasource │ ...
解决Spring Cloud Gateway网关跨域问题
今天前端突然说接口不支持跨域了,马上排查了一番,原因是之前接口一直提供给App使用的,所以不存在跨域的问题。解决方案就是在网关处新增配置类:
123456789101112131415161718192021222324252627282930313233343536373839404142import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.reactive.CorsWebFilter;import org.springframework.web.util.pattern.PathPatternParser;@Configurationpublic class CorsConfig { /** * 允许跨域请求 ...
多租户SaaS数据库租户模式
本文介绍可用于多租户 SaaS 应用程序的各种租户模型。
在设计多租户 SaaS 应用程序时,必须慎重选择最符合应用程序需要的租户模型。 租户模型确定如何将每个租户的数据映射到存储。 所选的租户模型会影响应用程序设计和管理。 今后改用不同的模型可能需要付出一定的代价。
A. SaaS 概念和术语在软件即服务 (SaaS) 模型中,贵公司不会销售软件的 许可证。 而是,每个客户都会向贵公司支付租金,使每个客户成为贵公司的 租户。
作为支付租金的回报,每个租户都可以访问 SaaS 应用程序组件,并将数据存储在 SaaS 系统中。
术语 租户模型 是指租户存储数据的组织方式:
单租户: 每个数据库仅存储来自一个租户的数据。
多租户: 每个数据库都存储来自多个独立租户的数据(使用保护数据隐私的机制)。
混合租户模式也可用。
B. 如何选择适当的租户模型一般情况下,租户模型不会影响应用程序的功能,但可能会影响总体解决方案的其他方面。 以下条件用于评估每个模型:
可伸缩性:
租户数目。
每个租户的存储量。
总存储量。
工作负荷。
租户隔离:数据隔离和性能(一个租户的工作负荷是否影响 ...
IntelliJ IDEA 2021.1激活步骤
目前Jetbrains系列软件的激活方式为通过插件进行30天试用期重置的方式,其他方式都已经失效
1、关于下载安装包可以直接到官方网站下载 https://www.jetbrains.com/idea/download/ 下载版本2021.1
2、IDE Eval Reset 重置试用期插件安装方法:(1)、运行软件,点击试用,进入到软件创建新项目窗口;(2)、左上角菜单栏点打开软件设置窗口:IntelliJ IDEA/Preferences,然后选择 Plugins,点击设置图标手动添加第三方插件仓库地:https://plugins.zhile.io(3)、添加仓库后,搜索IDE Eval Reset 插件进行安装
3.插件使用方法安装插件后,在Help -> Eval Reset 调出,有 2 个按钮和 1 个勾选项:按钮:Reload 用来刷新界面上的显示信息。按钮:Reset 点击会询问是否重置试用信息并重启 IDE。选择 Yes 则执行重置操作并重启 IDE 生效,选择 No 则什么也不做。(此为手动重置方式)勾选项:Auto reset before pe ...
Go实现文件接收
前段时间遇到一个问题,在只有nginx的情况下,实现文件的上传,突然想着利用Go可以非常简单的来实现。分为两个部分:服务端和客户端。代码如下所示:
服务端:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455package mainimport ( "fmt" "io" "net/http" "os")const ( upload_path string = "/Users/chenhu/Desktop/upload/")func helloHandle(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "hello world!")}//上传func uploadHandle(w http.ResponseWriter, r ...
自定义Spring Cache的key
在多租户系统中,为了统一处理系统缓存,需在缓存组件中加上租户Id,以下是自定义自定义Spring Cache的key步骤。
1、继承RedisCacheManager123456789101112131415public class RedisAutoCacheManager extends RedisCacheManager { public RedisAutoCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) { super(cacheWriter, defaultCacheConfiguration); } /** * 从上下文中获取租户ID,重写@Cacheable value值 * @param name * @return */ @Override public Cache getCache(String name) { ...
Vue实现跨域请求
一般解决跨域问题可以通过CORS跨域、JSONP和反向代理跨域。下面分别介绍这三种跨域方式:
1、CORS以netty为例,支持跨域请求需要配置的返回头信息。
1234567891011FullHttpResponse response = null;String responseStr = result.toString() + "xxxxx";response.headers().set("response", MD5Util.getMD5Code(responseStr, true));response.headers().set(HttpHeaderNames.ACCESS_CONTROL_EXPOSE_HEADERS, "response"); // 有增加头的配置response.headers().set(HttpHeaderNames.CONTENT_TYPE, "application/json");response.headers().set(HttpHeaderNames.CONTEN ...
重放攻击的实现方案
最近系统上线之前需要做安全测试,安全测试人员指出了系统存在重放攻击,由于之前项目没有遇到过这样的问题,在这里就详细探讨一下重放攻击。
所谓重放攻击就是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。从这个解释上理解,加密可以有效防止会话劫持,但是却防止不了重放攻击。重放攻击任何网络通讯过程中都可能发生。
1、基于timestamp的方案每次HTTP请求,都需要加上timestamp参数,然后把timestamp和其他参数一起进行数字签名。因为一次正常的HTTP请求,从发出到达服务器一般都不会超过60s,所以服务器收到HTTP请求之后,首先判断时间戳参数与当前时间相比较,是否超过了60s,如果超过了则认为是非法的请求。假如黑客通过抓包得到了我们的请求url:https://www.clang.asia/index/Info?uid=ZX07&stime=1480862753&sign=80b886d71449cb33355d017893720666其中
1String ...
macOS下如何编译FFmpeg for macOS APP
我们今天来说说如何编译出适用于macOS APP的库,包括动态库和静态库。
一、基本编译1、首先我们下载一个最新的ffmpeg源码。
1git clone https://git.ffmpeg.org/ffmpeg.git
2、配置./configure选项,这个要注意需要设置对macOS最低版本的要求,否则是默认当前本机的最新系统如,这样的话在使用库的时候,如果是APP要运行在10.10及之下的系统时候,就会报错。
1--extra-cflags=-mmacosx-version-min=10.8 --extra-ldflags=-mmacosx-version-min=10.8
3、执行./configure内容如下:
1./configure --target-os=darwin --enable-static --enable-swscale --enable-nonfree --enable-gpl --enable-version3 --enable-nonfree --disable-programs --libdir=/ffmpegbuild ...