ASList

zuul+security跨域Cors问题解决

亡梦爱人 提交于 2019-12-14 09:02:37
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> zuul+security跨域Cors问题解决 简介 场景 在服务后台都会出现跨域cors问题,不过一般spring解决起来比较方便,在框架+框架的基础上,问题就显得特别明显了,各种冲突,不了解源码的运行原理,解决起来也是有心无力。 这里介绍的是zuul配置了跨域,在前端调用仍然会出现跨域的问题。 一般没有权限的接口加上cors配置就会通过跨域的问题。不过在服务间调用具有权限的功能,莫名的报跨域问题。 post特殊请求 在解决问题时发现 post 请求也有点特殊,这里也需要处理一下。 post请求分为简单请求和复杂请求。 在 CORS 中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。预检请求报文中的 Access-Control-Request-Method 首部字段告知服务器实际请求所使用的 HTTP 方法; Access-Control-Request-Headers 首部字段告知服务器实际请求所携带的自定义首部字段。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。 以及 OPTIONS 未携带任何权限相关的内容,会被认证拦截,我们也得放开 OPTIONS 类型请求 功能使用 Cross 解决 之前设置很简单,习惯操作把之前的代码复制了过来

sharding-jdbc4.0使用方式

自古美人都是妖i 提交于 2019-12-09 13:29:07
Sharding-jdbc 简介 Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。 内部结构 使用流程 初始化流程 配置Configuration对象。 通过Factory对象将Configuration对象转化为Rule对象。 通过Factory对象将Rule对象与DataSource对象装配。 Sharding-JDBC使用DataSource对象进行分库。 版本依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId

sharding-jdbc4.0使用方式

可紊 提交于 2019-12-07 15:32:27
Sharding-jdbc 简介 Sharding-JDBC是ShardingSphere的第一个产品,也是ShardingSphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。 适用于任何基于JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。 支持任意实现JDBC规范的数据库。目前支持MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92标准的数据库。 内部结构 使用流程 初始化流程 配置Configuration对象。 通过Factory对象将Configuration对象转化为Rule对象。 通过Factory对象将Rule对象与DataSource对象装配。 Sharding-JDBC使用DataSource对象进行分库。 版本依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId

java并发编程-12个原子类

此生再无相见时 提交于 2019-12-07 12:02:52
背景 多线程更新变量的值,可能得不到预期的值,当然增加syncronized关键字可以解决线程并发的问题。 这里提供另外一种解决问题的方案,即位于 java.util.concurrent.atomic包下的原子操作类,提供了一种用法简单,性能高效,线程安全的更新变量的方式。 其它两个附带的类顺带看了一下: LongAddr 多线程先的sum操作 LongAccomulator 多线程下的函数式操作,性能低于AtomicLong,主要是函数式的支持; 简单分类: 基本类型原子类 使用原子的方式更新基本类型,包括: AtomicBoolean AtomicInteger AtomicLong 核心方法: 直接看源码了。 类签名: public class AtomicInteger extends Number implements java.io.Serializable {} 方法 功能说明 构造方法 两个构造方法,不传或者传入值 get方法 get()获取值;对应的有set(int)方法,layzySet(int) 懒设置 getAndAdd(int) 获得老值然后增加一个数字, 对应的有addAndGet(int)增加一个数字并返回新值 getAndSet(int) 获得老值然后更新为新值 getAndIncreament() 获得老值然后+1

java并发编程-12个原子类

半世苍凉 提交于 2019-12-07 11:36:46
背景 多线程更新变量的值,可能得不到预期的值,当然增加syncronized关键字可以解决线程并发的问题。 这里提供另外一种解决问题的方案,即位于 java.util.concurrent.atomic包下的原子操作类,提供了一种用法简单,性能高效,线程安全的更新变量的方式。 其它两个附带的类顺带看了一下: LongAddr 多线程先的sum操作 LongAccomulator 多线程下的函数式操作,性能低于AtomicLong,主要是函数式的支持; 简单分类: 基本类型原子类 使用原子的方式更新基本类型,包括: AtomicBoolean AtomicInteger AtomicLong 核心方法: 直接看源码了。 类签名: public class AtomicInteger extends Number implements java.io.Serializable {} 方法 功能说明 构造方法 两个构造方法,不传或者传入值 get方法 get()获取值;对应的有set(int)方法,layzySet(int) 懒设置 getAndAdd(int) 获得老值然后增加一个数字, 对应的有addAndGet(int)增加一个数字并返回新值 getAndSet(int) 获得老值然后更新为新值 getAndIncreament() 获得老值然后+1

java8新特性——stream笔记

不打扰是莪最后的温柔 提交于 2019-12-07 08:37:50
stream对象 Stream<T> IntStream LongStream DoubleStream 创建 常用的三种方式: 使用list对象: list.stream() − 为集合创建串行流。 list.parallelStream() − 为集合创建并行流。 Arrays: Arrays.stream( T[] array) − 为数组创建流(可以创建IntStream,LongStream,DoubleStrem)。 Stream: Stream.of(T... values) − 为一组同类型的数据创建流。 demo: /** * 集合接口有两个方法来生成流: * 按照流的类型可分为串行流和并行流 * stream() − 为集合创建串行流。 * parallelStream() − 为集合创建并行流。 */ private static Stream<String> createStreamFromCollection() { List<String> list = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); return list.stream(); } /** * 使用Stream.of()创建流 * @return */ private static Stream<String>

java并发编程-12个原子类

孤街浪徒 提交于 2019-12-06 20:01:33
背景 多线程更新变量的值,可能得不到预期的值,当然增加syncronized关键字可以解决线程并发的问题。 这里提供另外一种解决问题的方案,即位于 java.util.concurrent.atomic包下的原子操作类,提供了一种用法简单,性能高效,线程安全的更新变量的方式。 其它两个附带的类顺带看了一下: LongAddr 多线程先的sum操作 LongAccomulator 多线程下的函数式操作,性能低于AtomicLong,主要是函数式的支持; 简单分类: 基本类型原子类 使用原子的方式更新基本类型,包括: AtomicBoolean AtomicInteger AtomicLong 核心方法: 直接看源码了。 类签名: public class AtomicInteger extends Number implements java.io.Serializable {} 方法 功能说明 构造方法 两个构造方法,不传或者传入值 get方法 get()获取值;对应的有set(int)方法,layzySet(int) 懒设置 getAndAdd(int) 获得老值然后增加一个数字, 对应的有addAndGet(int)增加一个数字并返回新值 getAndSet(int) 获得老值然后更新为新值 getAndIncreament() 获得老值然后+1

java8新特性——stream笔记

可紊 提交于 2019-12-06 16:52:19
stream对象 Stream<T> IntStream LongStream DoubleStream 创建 常用的三种方式: 使用list对象: list.stream() − 为集合创建串行流。 list.parallelStream() − 为集合创建并行流。 Arrays: Arrays.stream( T[] array) − 为数组创建流(可以创建IntStream,LongStream,DoubleStrem)。 Stream: Stream.of(T... values) − 为一组同类型的数据创建流。 demo: /** * 集合接口有两个方法来生成流: * 按照流的类型可分为串行流和并行流 * stream() − 为集合创建串行流。 * parallelStream() − 为集合创建并行流。 */ private static Stream<String> createStreamFromCollection() { List<String> list = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); return list.stream(); } /** * 使用Stream.of()创建流 * @return */ private static Stream<String>

SpringSecurity环境下配置CORS跨站资源共享规则

怎甘沉沦 提交于 2019-12-06 11:39:44
一、CORS简述 要说明CORS(Cross Origin Resourse-Sharing) 跨站资源共享,就必须先说同源策略。长话短说,同源策略就是向服务端发起请求的时候,以下三项必须与当前浏览器应用一致:域名、端口、协议。用白话说:就是你的应用发送请求不能访问别人的资源,否则浏览器就会限制你。当然也有例外,如:img、srcipt、iframe等资源引用的HTML标签不受同源策略的限制。 但是我们实际开发中又经常会跨站访问,比如前后端分离的应用是分开部署的,在浏览器看来是两个域。所以同源策略是用来禁止跨域访问的,CORS正好相反是根据自己的需求与规则,有限的开放部分资源的共享。 二、Spring-CORS规则基础配置 想在Spring或Spring Boot的web环境下实现跨域资源共享,主要有三种实现方式: @CrossOrigin注解,这个注解是作用于Controller类或者请求方法上的,实现局部接口的跨域资源共享。 实现WebMvcConfigurer接口addCorsMappings方法,实现全局配置的跨域资源共享。 注入CorsFilter过滤器,实现全局配置的跨域资源共享。推荐使用。 这三种实现方式在我的另外一篇文章 《SpringBoot解决跨域访问的问题》 中已经介绍过,这里就不多做说明了。 三、Spring Security 中的配置CORS

设计模式之责任链模式

孤街醉人 提交于 2019-12-05 11:10:25
简介 责任链模式(Chain of Responsibility Pattern)属于设计模式的行为型模式。责任链模式与多米诺骨牌有点类似,请求在链中从前向后传递,一直到最后一个。当然责任链的处理可以复杂的多。 定义 责任链模式: 使多个对象都有机会处理请求,从而避免请求的发送者与请求处理者耦合在一起。将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 可以看到在标准的责任链中,请求是只由一个对象来处理的。不过我们不用拘泥于这个定义,责任链的主要目的是将请求处理的各个对象解耦出来,至于在链中传递时有多少个对象处理了请求,其实并不重要。 角色 从定义中可以看出,责任链模式包含的角色有有发送者,请求处理接口,具体请求处理实现及将实现连接起来的链。 发送者:产生请求对象,发起对链的调用 请求处理接口: 定义处理的标准接口,所有的具体请求处理实现都需要实现这个接口,链只需要依赖接口即可 具体请求处理实现:对请求进行处理,并决定是否继续向后传递请求 链:将所有的请求组装到一起,变成一个有序的处理链条 责任链模式可简单可复杂,一般来说接口和实现是必须的,链对象可以简单变为一个 List ,处理顺序也可以简化为 for 循环与发送者耦合到一起。如果处理比较复杂,像 Servlet Filter,网络请求库的Handler等框架则会有一个链对象,而且链中的下一级调用与否是由