在springBoot中配置跨域访问类以及RedisSession

在项目中,如果前端和后端不在一个服务器上,则前端服务器在访问后端时,就需要配置一个跨域访问,则你需要在controller层写上下图红线代码

在springBoot中配置跨域访问类以及RedisSession_第1张图片

 

但每个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请求代码里也要加上允许跨域访问的凭证,这样前后端才能正常通信

在springBoot中配置跨域访问类以及RedisSession_第2张图片

 

这样,前后端之间就能相互通信了。

 

-------------------------------------------------------分割线---------------------------------------------------------------

现在,又出现一个问题,session是后端服务器产生的,现在只有一台后端服务器,当不同的前端跨域访问一台后台服务器时,session之前的共享是没有问题的,但当后端服务器有两台或者多台时,session怎么在两台后台服务器中共享呢

在springBoot中配置跨域访问类以及RedisSession_第3张图片

这就是分布式应用中的session共享问题了。分割线之前解决的是跨域访问的资源共享,其实就是浏览器端产生的问题,不同的前端页面访问同一个后端的共享问题(在请求和响应的数据包里加上字段来共享内容)。eg:  如上图所示,html前端服务器访问后端1拿到数据后跳转到小程序前端,如果小程序前端要拿到html前端服务器从后台拿到后存在session中的数据,这就需要用到分割线之前的session配置了。

而现在我们要处理不同后端服务器之间的session共享,所以我们要在后端服务的前面加上redis服务器,把所有session存在redis服务器(共享服务器)里面

在springBoot中配置跨域访问类以及RedisSession_第4张图片

 

现在我们先来安装redis

 

我们在官网上下载redis后解压到D盘即可

然后进入cmd到Redis目录下,输入redis-server redis.windows.conf来启动redis的服务端(相当于启动了)

在springBoot中配置跨域访问类以及RedisSession_第5张图片

服务端启动后我们还无法操作它(相当于在windows服务里面启动oracle,mysql一样),所以我们还要启动客户端

同样进入cmd到Redis目录下,输入redis-cli -h 127.0.0.1 -p 6379 来启动redis的服务端(-h表示host主机 -p是端口)

在springBoot中配置跨域访问类以及RedisSession_第6张图片

这样就连接到了redis的服务器了,就下来我们可以在客户端敲命令了

 

接下来我们就去项目中去配置redisSession

首先去pom.xml去导入jar包

在springBoot中配置跨域访问类以及RedisSession_第7张图片

然后再去application.yml做redis的设置

在springBoot中配置跨域访问类以及RedisSession_第8张图片

注意的是,从你的配置文件开始加上了redis的服务器和redis的端口号后,则每次开启后端服务时,都要先启动redis服务器,不然后端服务器会报错

然后再去启动类里面加两个注解

在springBoot中配置跨域访问类以及RedisSession_第9张图片

这样,我们就完成啦!!

你可能感兴趣的:(SpringBoot,项目)