ASList

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

大兔子大兔子 提交于 2019-12-05 08:34:16
一、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

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

偶尔善良 提交于 2019-12-05 08:25:15
一、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

《提升能力,涨薪可待》-易理解的@SpringBootApplication注解源码解析

僤鯓⒐⒋嵵緔 提交于 2019-12-04 21:01:44
欢迎一起学习 提升能力,涨薪可待 面试知识,工作可待 实战演练,拒绝996 如果此文对你有帮助、喜欢的话,那就点个赞呗! 前言 是不是感觉在工作上难于晋升了呢? 是不是感觉找工作面试是那么难呢? 是不是感觉自己每天都在996加班呢? 在工作上必须保持学习的能力,这样才能在工作得到更好的晋升,涨薪指日可待,欢迎一起学习【 提升能力,涨薪可待 】系列 在找工作面试应在学习的基础进行总结面试知识点,工作也指日可待,欢迎一起学习【 面试知识,工作可待 】系列 最后,理论知识到准备充足,是不是该躬行起来呢?欢迎一起学习【 实战演练,拒绝996 】系列 springApplication 一、 @SpringBootApplication 的作用是什么? ​ Q:springboot项目的启动类上,都会有个注解 @SpringBootApplication ,这个注解起到了什么作用? @SpringBootApplication public class MicroServiceApplication { public static void main(String[] args) { SpringApplication.run(MicroServiceApplication.class, args); } } ​ 我们进入 @SpringBootApplication 注解,发现它

Groovy单元测试框架spock数据驱动Demo

风格不统一 提交于 2019-12-04 18:07:27
spock是一款全能型的单元测试框架。 上次文章分享了spock框架的基础功能的使用,在此基础上,我根据自己写的Groovy的封装方法、数据驱动以及一些Groovy的高级语法做了一些尝试。发现还是有一点点问题,不知道是不是因为我本身是Java和Groovy混编的项目导致的,不过也都有了解决方案。 分享代码,供各位参考: package com.FunTester.spock.pratice import com.fun.config.PropertyUtils import com.fun.frame.SourceCode import org.slf4j.Logger import spock.lang.Shared import spock.lang.Specification import static com.fun.config.Constant.EMPTY import static com.fun.config.Constant.getLongFile import static com.fun.frame.Output.output import static com.fun.frame.SourceCode.* class Test02 extends Specification { @Shared def properties = PropertyUtils

微服务之间调用控制器注解类型的差异

给你一囗甜甜゛ 提交于 2019-12-04 07:30:22
今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题: 1. 提示http请求头过大的问题; 此时需要修改bootstrap.yml,加入 server: max-http-header-size: 10000000 用以放大尺寸 2. 调用方法时提示404,无返回结果; 解决方法:把控制器的注解由@Controller变为@RestController,就可以 被调用方具体代码如下: @Slf4j @RestController @RequestMapping("/image") public class ImageController { private static List<String> allowUploadSuffixes = new ArrayList<>(Arrays.asList("png", "jpg", "jpeg", "zip", "pdf", "xls", "xlsx", "rar", "doc", "docx")); @Autowired private UploadFileEntityMapper uploadFileEntityMapper; @RequestMapping(value = "/uploadBase64", method = RequestMethod.POST) @ApiOperation(value =

简述Arrays.asList警示

一个人想着一个人 提交于 2019-12-03 13:31:06
asList方法顾名思义: 转换为集合 ,接收的是 Object变动参数 —— Arrays .asList( Object ... a) 示例: import java.util.Arrays; import java.util.List; public class Test47 { public static void main(String[] args) throws Exception { int[] data = {5, 4, 3, 2, 1}; List list = Arrays.asList(); System.out.println("元素类型:" + list.get(0).getClass()); System.out.println("前后是否相等:" + list.get(0).equals(data)); /* * 8大基本数据类型不能作为泛型参数,要想作为泛型参数需使用对应的包装类型 返回一个固定长度的列表如 源码: public static <T> List<T> * asList(T... a) { return new ArrayList<>(a); } */ System.out.println("列表中的元素数量是:" + list.size()); /* * Arrays.asList方法转换成list对象不可更改即add方法行不通 如

编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议60~66)

拟墨画扇 提交于 2019-12-03 13:30:47
如果你浪费了自己的年龄,那是挺可悲的。因为你的青春只能持续一点儿时间——很短的一点儿时间。 —— 王尔德 建议60:性能考虑,数组是首选 建议61:若有必要,使用变长数组 建议62:警惕数组的浅拷贝 建议63:在明确的场景下,为集合指定初始容量 建议64:多种最值算法,适时选择 建议65:避开基本类型数组转换列表陷阱 建议66:asList方法产生的List对象不可修改 建议60:性能考虑,数组是首选 数组在实际的系统开发中用的越来越少了,我们通常只有在阅读一些开源项目时才会看到它们的身影,在Java中它确实没有List、Set、Map这些集合类用起来方便,但是在基本类型处理方面,数组还是占优势的,而且集合类的底层也都是通过数组实现的,比如对一数据集求和这样的计算: package OSChina.Client; import java.util.ArrayList; import java.util.List; public class Client2 { public static void main(String[] args) { int datas[] = new int[10000000]; for (int i = 0; i < 10000000; i++) { datas[i] = i; } int sum = 0; long start1 = System

避免基本类型数组转换列表陷阱(Arrays.asList())

你。 提交于 2019-12-02 06:18:33
一、分析 我们在开发的过程中经常会使用Arrays和Collections这两个工具类在数组和列表之间转换。 Arrays.asList()方法:输入一个变长参数,返回一个固定长度的列表。看源码: public static<T> List<T> asList(T... a){ return new ArrayList<T>(a); } asList方法输入的是一个泛型变长参数,我们知道基本类型是不能泛型化的,也就是说8个基本类型不能作为泛型参数,要想作为泛型化参数就必须使用其对应的包装类型。 二、场景 在使用Arrays虽然非常方便,但有时候会出现一些奇怪的问题,看如下代码: public static void main(String[] args){ int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println("列表中的元素数量是:" + list.size()); } 也许你会说,这很简单,list变量的元素数量当然是5。但是运行结果却是1。 由上分析得知,int基本类型是不能被泛型化,传入asList方法的。在Java中数组是一个对象,它是可以泛型化的,也就是说上面例子把int类型的数组作为了T的类型,所以在转换后在List中就只有一个类型为int数组的元素了。我们打印出来看看

Java 8 Stream并行流

末鹿安然 提交于 2019-12-02 04:43:07
流可以并行执行,以增加大量输入元素的运行时性能。并行流ForkJoinPool通过静态ForkJoinPool.commonPool()方法使用公共可用的流。底层线程池的大小最多使用五个线程 - 具体取决于可用物理CPU核心的数量: ForkJoinPool commonPool = ForkJoinPool.commonPool(); System.out.println(commonPool.getParallelism()); // 3 在我的机器上,公共池初始化为默认值为3的并行度。通过设置以下JVM参数可以减小或增加此值: -Djava.util.concurrent.ForkJoinPool.common.parallelism=5 集合支持创建并行元素流的方法parallelStream()。或者,您可以在给定流上调用中间方法parallel(),以将顺序流转换为并行流。 为了评估并行流的并行执行行为,下一个示例将有关当前线程的信息打印出来: Arrays.asList("a1", "a2", "b1", "c2", "c1") .parallelStream() .filter(s -> { System.out.format("filter: %s [%s]\n", s, Thread.currentThread().getName()); return true

Simple Session 源码分析

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-01 07:32:57
摘要: 分布式Session的实现有很多,从简单到复杂各种各样,但是要做到分布式Session跟原生本地Session一致的API,对开发人员几乎是0门槛是不容易的。SpringSession 提供了现成的分布式Session功能,本文就是介绍SpringSession的实现细节 1. 概要 本文介绍SpringSession的主要功能的实现原理。在看源码的同时参照SpringSession开了一个“简化”版的Session框架--SimpleSession,简单好用,功能刚好够用,由于删除了很多SpringSession种用不到的功能,源码上可读性更好和自定义开发更容易。 2. 替代本地原生Session的秘密 几乎所有的方案都类似,使用 Filter 把请求拦截掉然后包装 Request 和 Response 使得 Request.getSession 返回的 Session 也是包装过的,改变了原有 Session 的行为,譬如存储属性值是把属性值存储在 **Redis** 中,这样就实现了`分布式Session`了。 SpringSession 使用 SessionRepositoryFilter 这个过滤器来实现上面所说的。 SimpleSession 使用 SimpleSessionFilter 来实现。 2.1 SessionRepositoryFilter