拓扑图是这样的

iphash实现原理:

记录ip地址,生成iphash值,用这个值去绑定一台服务器,以后这个client的请求都会访问到绑定到的服务器中,这里生成iphash一般是通过Nginx进行生成,然后绑定。

缺点,失去了负载均衡的意义,单点故障,当某个服务器宕机后,服务器上的iphash都会挂了。中小企业用得多,用户信息不敏感。

Nginx配置如下:

worker_processes  1;events {worker_connections  1024;
}http {upstream ipHashDemo{ip_hash;server 127.0.0.1:8081;server 127.0.0.1:8082;}server{listen 8888;server_name 127.0.0.1;location / {proxy_pass http://ipHashDemo;}}
}

这里有一个要注意的,上个的server_name里面的prox_pass。

ipHashDemo要和upstream ipHashDemo相对应。

程序运行截图如下,登录用户和获取,都是在IPHashServer1中,这也是ipHashDemo:

关键源码如下:

IPHashServer1中

Server1Controller.java

package cn.it1995.ipHash.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;@RestController
public class Server1Controller {@GetMapping("/login")public Object userLogin(@RequestParam("username") String username,@RequestParam("password") String password,HttpSession session){session.setAttribute("username", username);session.setAttribute("password", password);Map<String, Object> ret = new HashMap<>();ret.put("result", "登录成功");return ret;}@GetMapping("getUser")public Object getUser(HttpSession session){Object username = session.getAttribute("username");Object password = session.getAttribute("password");Map<String, Object> ret = new HashMap<>();ret.put("用户名", username);ret.put("密码", password);ret.put("当前服务器名称", "IPHashServer1");return ret;}
}

IPHashServer2中

Server2Controller.java

package cn.it1995.ipHash.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;@RestController
public class Server2Controller {@GetMapping("/login")public Object userLogin(@RequestParam("username") String username,@RequestParam("password") String password,HttpSession session){session.setAttribute("username", username);session.setAttribute("password", password);Map<String, Object> ret = new HashMap<>();ret.put("result", "登录成功");return ret;}@GetMapping("getUser")public Object getUser(HttpSession session){Object username = session.getAttribute("username");Object password = session.getAttribute("password");Map<String, Object> ret = new HashMap<>();ret.put("用户名", username);ret.put("密码", password);ret.put("当前服务器名称", "IPHashServer2");return ret;}
}

Java工作笔记-Nginx配置IPHash(单点登录)相关推荐

  1. JEECG配置Kisso单点登录

    JEECG配置Kisso单点登录 软件版本 JEECG版本:3.8 1.验证系统表示:kisso服务端 2.业务系统表示:kisso客户端 1.配置服务端和客户端 根据官方文档进行配置(http:// ...

  2. 在Horizon Workspace中配置Windows单点登录-进阶篇

    在上一篇基础篇里面,简单介绍了在Horizon Workspace 1.8中如何配置Windows单点登录.在这篇博客中,会继续介绍一些针对大规模虚机或者虚拟桌面部署的配置方式.这些配置方式可以保证用 ...

  3. Nginx配置Basic Auth登录认证的实现方法

    这篇文章主要介绍了Nginx配置Basic Auth登录认证的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 有时候我们通过nginx搭建了一台文件服务器, 一般 ...

  4. JSON Web Token (JWT)笔记(token实现单点登录功能)

    文章目录 前情提要 cookie(储存在用户本地终端上的数据) Cookie特点: session(web服务端内存) cookie和session 单点登录(只登录一次,可使用账号下全部服务)三种方 ...

  5. 无忧·企业文档自助配置完成单点登录配置,对接企业原有组织架构

    我作为企业文档的产品负责人,常常被问及企业文档和其他在线文档有啥差不一样的地方? 我大致总结了下,有几个方面: 1.企业文档定位于企业内部的内容管理工具,侧重于私有化部署.核心的是数据的控制权在企业自 ...

  6. java cookie p3p_利用P3P实现单点登录和COOKIE的跨域读写

    首先说明,同一个顶级域名的情况我不说什么,很简单,就一个Cookie的Domain属性. 下面来说顶级域名不同的情况. 有时候我们会有这么一种需求:当我们登录A网站www.a.com时,同时也要能登录 ...

  7. nginx工作笔记005---nginx配置负载均衡_在微服务中实现网关集群_实现TCP传输层协议__http协议的负载均衡

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 我们在微服务中,由于网关的存在,后来,在nginx中都不需要在配置其他服务的地址了,只需要,配置一 ...

  8. Java工作笔记/Java面试题/Java八股文/Java常用API

    码农工具包 hutool工具 hutool工具类判断各种类型数据 <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --& ...

  9. Java工作笔记-@Value注解的使用(可用于配置文件)

    目录 基本概念 代码与实例 程序打包下载 基本概念 @Value:注入配置文件中的内容.只要是spring的注解类(service,compotent, dao等)中都可以. @Component:泛 ...

最新文章

  1. 【BZOJ】【3301】【USACO2011 Feb】Cow Line
  2. element-ui源码阅读笔记(button篇)
  3. 短视频图像处理 OpenGL ES 实践
  4. 查找某组织下子库存与物料信息
  5. java修改ajax响应头401_当jquery ajax遇上401请求的解决方法
  6. numpy常用矩阵运算
  7. 大学计算机网络实训目的,计算机专业大学生毕业实习目的
  8. 菜鸟驿站进军万亿社区市场
  9. windows C++ 解决Office打开文件提示“您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致”
  10. 如何将YouTube视频插入PowerPoint演示文稿
  11. ASO时,选词应该如何做?aso关键词如何选词
  12. iOS8新功能新特性
  13. Mac系统空格预览放大图片
  14. 老毛桃PE系统,迁移系统机械到固态硬盘
  15. VMT model 简介
  16. 中心极限与大数定理律的关系_麦克斯韦速度分布律与气体分子碰壁数的推导
  17. 深大自考计算机科学与技术资料,想自考深圳大学的计算机科学与技术专业,难吗?...
  18. AndroidStudio快捷键中文版
  19. 移动端上(传图片太大)处理方案
  20. Android:设计一个在屏幕上移动的小球程序

热门文章

  1. 【C++基金会 06】explictkeyword
  2. HTTP 协议中 Vary 的一些研究
  3. Mysql主主同步详细操作过程
  4. 数据驱动科技赋能,东吴证券打造数据中台“九大能力”
  5. Hadoop技术在商业智能BI中的应用
  6. 从功能、交互、性能全方位解读,BI工具FineBI4.0.2测评报告
  7. 软件用户体验非常好的前端设计
  8. 不要局限在完成当前飞鸽传书2009的简单思路上
  9. TreeCtrl 查找功能的最简单实现
  10. 跨进程实现在Tree中快速定位节点