Spring Boot 使用 Redis 进行 Session 共享(Ajax 跨域)

相关文章:

CentOS 1810 安装 Redis 5.0.3

Windows 中 安装 Redis 解压版

Windows 中 安装 Redis 可执行程序

Windows 中 安装 Redis 桌面连接工具(RedisDesktopManager)

在 IntelliJ IDEA 2018.2.5 创建 Maven 项目

Spring Boot 使用 Redis 进行 Session 共享

Spring Boot 使用 Redis 进行 Session 共享(子域使用 Cookie 共享 Session)


前言:上一篇文章介绍了 Spring Boot 使用 Redis 进行 Session 共享,但缺少 Ajax 跨域设置,本文介绍将如何设置 Ajax 跨域。

  1. 未设置 Ajax 跨域时,显示错误如下:

     
  2. 在 Ajax 目标项目(项目二)的 cn.com.xuxiaowei.demo2.config 包下新建类 WebMvcConfigurerConfig,内容如下:
    package cn.com.xuxiaowei.demo2.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.CorsRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /**
     * Ajax 跨域
     *
     * @author xuxiaowei
     */
    @Configuration
    public class WebMvcConfigurerConfig implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
    
            // Ajax 请求指定域,需要提供协议、端口
            String[] origins = {"http://127.0.0.1:10001"};
    
            registry.addMapping("/**")
                    // 域
                    .allowedOrigins(origins)
                    // 默认为 GET, HEAD, POST
                    // 可以为 GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
                    .allowedMethods("GET", "HEAD", "POST")
                    // 默认为 1800秒(30分钟)
                    .maxAge(1800)
                    // 浏览器是否应将凭据(如Cookie和跨域请求)发送到带注释的端点。
                    .allowCredentials(true);
    
        }
    
    }
    
  3. 如果使用 Security 时,需要设置如下内容:
    /*
     * Copyright 2020 the original author or authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *   http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    package cn.com.xuxiaowei.security.configuration;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.web.cors.CorsConfiguration;
    import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
    
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * WebSecurity 配置
     *
     * @author xuxiaowei
     * @since 0.0.1
     */
    @Slf4j
    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfigurerAdapterConfiguration extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
    
            CorsConfiguration corsConfiguration = new CorsConfiguration();
    
            // Ajax 请求指定域,需要提供协议、端口
            List<String> origins = Arrays.asList("http://127.0.0.1:10001", "http://127.0.0.1:10002");
            corsConfiguration.setAllowedOrigins(origins);
            // 浏览器是否应将凭据(如Cookie和跨域请求)发送到带注释的端点。
            corsConfiguration.setAllowCredentials(true);
            // 默认为 GET, HEAD, POST
            // 可以为 GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
            List<String> allowedMethods = Arrays.asList("GET", "HEAD", "POST");
            corsConfiguration.setAllowedMethods(allowedMethods);
    
            UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
            urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
    
            // 跨域配置
            http.cors().configurationSource(urlBasedCorsConfigurationSource);
    
            // Security 其他配置
        }
    
    }
    
  4. 在 Ajax 请求项目(项目一)页面中修改为:
    <!DOCTYPE html>
    <html lang="zh" xmlns:th="https://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <!--<title>Domo1-10001</title>-->
        <title>Domo2-10002</title>
    </head>
    <body>
    
    <!--<h2>项目名:Domo1</h2>-->
    <!--<h2>端口号:10001</h2>-->
    
    <h2>项目名:Domo2</h2>
    <h2>端口号:10002</h2>
    
    域:<input name="domain" placeholder="域名需要有协议与端口">
    
    <button id="ajax">ajax</button>
    
    <br><br>
    
    <!--<h2>项目名:Domo2</h2>-->
    <!--<h2>端口号:10002</h2>-->
    
    [[${session.userInfo}]]
    
    </body>
    
    <script type="text/javascript" th:src="@{/jquery-3.4.0.min.js}"></script>
    
    <script th:inline="javascript" type="text/javascript">
    
        var $body = $("body");
    
        $body.on("click", "#ajax", function () {
    
            var domain = $('input[name="domain"]').val();
    
            $.ajax({
                url: domain + "/index.do",
                type: "GET",
                data: {},
                dataType: "json",
                success: function (resp) {
                    console.log("success:", resp);
                },
                fail: function (resp) {
                    console.log("fail:", resp);
                },
                complete: function (xhr, textStatus) {
                    console.log(textStatus);
                }
            });
    
        });
    
    </script>
    
    </html>
  5. 在 Ajax 目标项目(项目二)的 cn.com.xuxiaowei.demo2.controller 下新建类 IndexRestController,用于响应 Ajax 请求,内容如下:
    package cn.com.xuxiaowei.demo2.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @author xuxiaowei
     */
    @RestController
    public class IndexRestController {
    
        @RequestMapping("/index.do")
        public Map<String,Object>  indexDo(HttpServletRequest request, HttpServletResponse response) {
    
            Map<String,Object> map = new HashMap<>(4);
    
            StringBuffer requestURL = request.getRequestURL();
    
            map.put("data",requestURL);
    
            return map;
        }
    
    }
    
  6. 重新运行项目,在 项目一 中使用 Ajax 访问 项目二,测试结果为:

     
  7. 注意:使用项目二中的Ajax访问项目一时,同上。
     
  8. 项目源码下载地址:Spring Boot Redis Session 共享(Ajax 跨域)
  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值