在项目中,如果前端和后端不在一个服务器上,则前端服务器在访问后端时,就需要配置一个跨域访问,则你需要在controller层写上下图红线代码
但每个conroller层上都写显得太麻烦,所以我们可以编写一个跨域访问类,这样就可以减少代码的冗余度
package com.yy.hospital.conf;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
//配置允许跨域访问的ip--从这些url发过来的请求,都是允许支持的跨源请求
private static String[] orginVal=new String[]{
"localhost:8080",
"127.0.0.1:8080" //ip与域名会被当成两个不同的url
};
private void addAllowedOrigins(CorsConfiguration corsConfiguration){
for(String origin:orginVal){
//不同协议也是不同的url
corsConfiguration.addAllowedOrigin("http://"+origin);
corsConfiguration.addAllowedOrigin("https://"+origin);
}
}
@Bean //项目加载时,把过滤器生成,来统一管理跨源请求(不用再在每个controller上单独配置)
public CorsFilter corsFilter(){
//配置跨域访问的过滤器
//基于url的数据源
UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration=new CorsConfiguration();
//把允许的跨域源添加到corsConfiguration中
this.addAllowedOrigins(corsConfiguration);
corsConfiguration.addAllowedMethod("*"); //不对method做限制,允许所有method请求(get,post....)
corsConfiguration.addAllowedHeader("*"); //不对head做限制
corsConfiguration.setAllowCredentials(true); //允许跨域访问(在响应报文里带上跨域请求的凭证,和浏览器请求里面xhrFields相匹配,前后端才能正常通信)
source.registerCorsConfiguration("/**",corsConfiguration); //指定对当前这个服务下的所有请求都启用corsConfiguration的配置
return new CorsFilter(source);
}
}
当然前端服务器的ajax请求代码里也要加上允许跨域访问的凭证,这样前后端才能正常通信
这样,前后端之间就能相互通信了。
-------------------------------------------------------分割线---------------------------------------------------------------
现在,又出现一个问题,session是后端服务器产生的,现在只有一台后端服务器,当不同的前端跨域访问一台后台服务器时,session之前的共享是没有问题的,但当后端服务器有两台或者多台时,session怎么在两台后台服务器中共享呢
这就是分布式应用中的session共享问题了。分割线之前解决的是跨域访问的资源共享,其实就是浏览器端产生的问题,不同的前端页面访问同一个后端的共享问题(在请求和响应的数据包里加上字段来共享内容)。eg: 如上图所示,html前端服务器访问后端1拿到数据后跳转到小程序前端,如果小程序前端要拿到html前端服务器从后台拿到后存在session中的数据,这就需要用到分割线之前的session配置了。
而现在我们要处理不同后端服务器之间的session共享,所以我们要在后端服务的前面加上redis服务器,把所有session存在redis服务器(共享服务器)里面
现在我们先来安装redis
我们在官网上下载redis后解压到D盘即可
然后进入cmd到Redis目录下,输入redis-server redis.windows.conf来启动redis的服务端(相当于启动了)
服务端启动后我们还无法操作它(相当于在windows服务里面启动oracle,mysql一样),所以我们还要启动客户端
同样进入cmd到Redis目录下,输入redis-cli -h 127.0.0.1 -p 6379 来启动redis的服务端(-h表示host主机 -p是端口)
这样就连接到了redis的服务器了,就下来我们可以在客户端敲命令了
接下来我们就去项目中去配置redisSession
首先去pom.xml去导入jar包
然后再去application.yml做redis的设置
注意的是,从你的配置文件开始加上了redis的服务器和redis的端口号后,则每次开启后端服务时,都要先启动redis服务器,不然后端服务器会报错
然后再去启动类里面加两个注解
这样,我们就完成啦!!