*/
@Configuration
public class CorsFilterConfig {
@Bean
public FilterRegistrationBean filterFilterRegistrationBean(){
//1.对此过滤器进行配置(跨域设置-url,method)
UrlBasedCorsConfigurationSource configSource=new UrlBasedCorsConfigurationSource();
CorsConfiguration config=new CorsConfiguration();
//允许哪种请求头跨域
config.addAllowedHeader(“*”);
//允许哪种方法类型跨域 get post delete put
config.addAllowedMethod(“*”);
// 允许哪些请求源(ip:port)跨域
config.addAllowedOrigin(“*”);
//是否允许携带cookie跨域
config.setAllowCredentials(true);
//2.注册过滤器并设置其优先级
configSource.registerCorsConfiguration(“/**”, config);
FilterRegistrationBean fBean= new FilterRegistrationBean(new CorsFilter(configSource));
fBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return fBean;
}
}
===================================================================
本次项目我们的客户端工程基于springboot工程进行设计,项目上线时可以将其静态资源直接放到一个静态资源目录中.
在sca-resource-ui工程的pom文件中添加web依赖,例如:
org.springframework.boot
spring-boot-starter-web
package com.jt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ClientApplication {
public static void main(String[] args) {
SpringApplication.run(ClientApplication .class, args);
}
}
在工程的resources目录下创建static目录(假如这个目录已经存在则无需创建),然后在此目录创建fileupload.html静态页面,例如:
上传文件
第一步:启动nacos服务(在这里做服务的注册和配置管理)
第二步:启动sca-resource服务,此服务提供文件上传功能
第三步:启动sca-resource-ui服务,此服务为客户端工程,提供静态资源的访问.所有页面放到此工程中.
第四步:打开浏览器,访问sca-resource-ui工程下的文件上传页面,例如:
============================================================================
API 网关是外部资源对服务内部资源访问的入口,所以文件上传请求应该首先请求的是网关服务,然后由网关服务转发到具体的资源服务上。
第一步:创建sca-resource-gateway工程,例如:
第二步:添加项目依赖,例如:
org.springframework.cloud
spring-cloud-starter-gateway
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
第三步:创建配置文件bootstrap.xml,然后进行初始配置,例如:
server:
port: 9000
spring:
application:
name: sca-resource-gateway
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yml
gateway:
discovery:
locator:
enabled: true
routes:
- id: router01
uri: lb://sca-resource
predicates:
- Path=/sca/resource/upload/**
filters:
- StripPrefix=1
第四步:构建项目启动类,并进行服务启动,检测是否正确,例如:
package com.jt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ResourceApplication {
public static void main(String[] args) {
SpringApplication.run(ResourceApplication.class,args);
}
}
当我们基于Ajax技术访问网关时,需要在网关层面进行跨域设计,例如:
package com.jt.config;
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
//@Configuration
public class CorsFilterConfig {
@Bean
public CorsWebFilter corsWebFilter(){
//1.构建基于url方式的跨域配置
UrlBasedCorsConfigurationSource source= new UrlBasedCorsConfigurationSource();
//2.进行跨域配置
CorsConfiguration config=new CorsConfiguration();
//2.1允许所有ip:port进行跨域
config.addAllowedOrigin(“*”);
//2.2允许所有请求头跨域
config.addAllowedHeader(“*”);
//2.3允许所有请求方式跨域:get,post,…
config.addAllowedMethod(“*”);
//2.4允许携带有效cookie进行跨域
config.setAllowCredentials(true);
source.registerCorsConfiguration(“/**”,config);
return new CorsWebFilter(source);
}
}
Spring Gateway工程中的跨域设计,除了可以在网关项目中以java代码方式进行跨域过滤器配置,还可以直接在配置文件进行跨域配置,例如:
spring:
cloud:
gateway:
globalcors: #跨域配置
corsConfigurations:
‘[/**]’:
allowedOrigins: “*”
allowedHeaders: “*”
allowedMethods: “*”
allowCredentials: true
首先打开网关(Gateway),资源服务器(Resource),客户端工程服务(UI),然后修改fileupload.html文件中访问资源服务端的url,例如
let url=“http://localhost:9000/sca/resource/upload/”;
接下来进行访问测试,例如:
第一步:在网关pom文件中添加依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba.cloud
spring-cloud-alibaba-sentinel-gateway
第二步:在网关配置文件中添加sentinel配置
sentinel:
transport:
dashboard: localhost:8180
eager: true
第三步:在网关项目启动时,配置jvm启动参数,例如:
-Dcsp.sentinel.app.type=1
第四步:先执行一次上传,然后对上传进行限流规则设计
第五步:修改文件上传页面js,对限流结果进行处理,例如:
function upload(file){
//定义一个表单(axios中提供的表单对象)
let form=new FormData();
//将文件添加到表单中
form.append(“uploadFile”,file);
//异步提交(现在是提交到网关)
//let url=“http://localhost:8881/resource/upload/”
let url=“http://localhost:9000/sca/resource/upload/”;
axios.post(url,form)
.then(function (response){
alert(“upload ok”)
console.log(response.data);
})
.catch(function (e){//失败时执行catch代码块
//被限流后服务端返回的状态码为429
if(e.response.status==429){
alert(“上传太频繁了”);
}
console.log(“error”,e);
})
}
第六步:启动服务进行文件上传测试,检测限流效果
=====================================================================
在实现文件上传业务时,添加记录日志的操作.
在sca-resource工程中添加AOP依赖,例如:
org.springframework.boot
spring-boot-starter-aop
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
《MySql面试专题》
《MySql性能优化的21个最佳实践》
《MySQL高级知识笔记》
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
12124622328)]
[外链图片转存中…(img-o4hTO972-1712124622328)]
[外链图片转存中…(img-sSHlrUye-1712124622329)]
[外链图片转存中…(img-pTEOUvMx-1712124622329)]
[外链图片转存中…(img-zcGdU5kh-1712124622329)]
[外链图片转存中…(img-YtjUSyYs-1712124622329)]
[外链图片转存中…(img-n309bVGn-1712124622329)]
[外链图片转存中…(img-0gtN31Kv-1712124622330)]
文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图
[外链图片转存中…(img-2DvCzGsF-1712124622330)]
关注我,点赞本文给更多有需要的人
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算