【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;
    }
}

添加一个中转页

在后台添加一个中转页,用来接受数据。处理数据然后跳转到对应的页面
【Nginx 代理前端第三方免登录-token验证,session和local缓存填入】_第1张图片

DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
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 pagediv>
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
【Nginx 代理前端第三方免登录-token验证,session和local缓存填入】_第2张图片

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

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

你可能感兴趣的:(第三方配置,Java,服务器配置,nginx,前端,缓存,java)