【Nginx 代理前端第三方免登录-token验证,session和local缓存填入】

先讲一下这个是什么问题
有一个平台想不登录就可以直接访问一个已经存在登录验证的平台,大概就是这么一个场景。
但是这里有一个问题就是不同域名不同端口的就是属于跨域,这样是不可能把缓存数据cookie写到对应的浏览器跳过验证的,这里就用到了Nginx来监听同一域名同一端口下的地址,进行写入。

先处理业务上获取第三方的token验证相关数据

这个接口是用来后面Nginx访问触发的。这里验证数据我就写死了,大致怎么获取要看对接的平台的业务逻辑,无非就是用个账号登录获取最新的。

@RestController
@RequestMapping("/sso")
public class SsoTestController {

    @GetMapping("/aisLogin")
    public ModelAndView aisLogin(HttpServletRequest request, HttpServletResponse response) {
        String token ="eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjRiMjNlNDliLWFjYzItNDE0MC04NGI3LTJjNjhmMTUwODFjZSIsInVzZXJuYW1lIjoiYWRtaW4ifQ.Bcv86XX0bp6Ie421EMdfV-dhKhynz2dgjrhFxbJpfnlrlu8ThqpvVpLnehvk-Ijf8lYTAwO8g88Rrt2SOPewQQ";
        // 这里new一个对象作为返回值,填对应的中转页viewName,添加中转也接受的值处理.
        ModelAndView model = new ModelAndView();
        model.setViewName("login");
        model.addObject("token",token);
		
		// 这里是写入cookie数据
        Cookie cookie = new Cookie("Admin-Token", token);
        // 主要这地址是要跳转的平台的地址,path要用/
        cookie.setDomain("192.168.124.27");
        cookie.setPath("/");
        response.addCookie(cookie);

        Cookie cookie1 = new Cookie("Admin-Expires-In", "720");
        cookie1.setPath("/");
        cookie1.setDomain("192.168.124.27");
        response.addCookie(cookie1);
        response.setHeader("Authorization","Bearer "+token);
        return model;
    }
}

添加一个中转页

在后台添加一个中转页,用来接受数据。处理数据然后跳转到对应的页面
在这里插入图片描述

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<script th:inline="javascript" type="text/javascript">
	<!--获取对应的页面数据 -->
    const token = [[${token}]]
    console.log("token:{}",token);
    <!--数据添加到缓存中 -->
    window.localStorage.setItem("token",{"value":token});
    window.sessionStorage.setItem("token",{"value":token});
    <!--跳转的页面,要保证这个地址和nginx监听的地址端口要一致 -->
    window.location.replace("http://192.168.124.15:81/index");
</script>
<body>
<div>Login page</div>
</body>
</html>

配置nginx监听、跳转

    server {
       # 监听的是对应的要写入的端口
        listen       81;
        server_name  192.168.124.15;

        location / {
             proxy_pass http://192.168.124.27:81/;
             proxy_set_header Host $host:$server_port;
        }
		
		# 这个地址是用来监听nginx来访问81带路径触发后台的功能进行业务逻辑处理
        location /sso {
            proxy_pass http://192.168.124.15:9088/sso/aisLogin/;
            proxy_set_header Host $host:$server_port;
        }
  }

这样大概的配置就完成,就可以进行访问了。

这里访问的地址应该是这样的

niginxIP + 监听端口+ 监听路径

也就是和前端页面在一个IP + Nginx监听端口+监听路径
192.168.124.15:81/sso
在这里插入图片描述

这样用postMan请求上面的地址 访问成功就可以直接在页面上测试了。

其实只要保证中转页面的ip端口和Nginx默认监听转发的ip端口一致就可以完成域加载写入

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dotclv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值