nginx集羣tomcat,session共享問題

tomcat-redis-session-manager
版本: apache-tomcat-8.0.3二、nginx-1.13.十二、redis_3.2.1html

github地址: https://github.com/mzd123/session_manager 讀者能夠直接下載體驗一下。java

實現:nginx

一、下載:https://github.com/ran-jit/tomcat-cluster-redis-session-manager/wikigit

 

二、解壓以後。將jar包放入tomcat的lib中(注意是tomcat/lib中,不是咱們本身項目的lib) github


三、配置解壓以後的redis-data-cache.properties(根據你的redis配置吧)。配置完將這個文件放入tomcat/conf文件夾中。 web

 


四、配置tomcat/cong/context.xml,增長以下兩行。redis

 

<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>apache


五、注意:由於tomcat-redis-session-manager這個版本的不一樣,classname會隨着變化,2.0.4的版本是叫這兩個。其實能夠打開你下載的tomcat-cluster-redis-session-manager.jar看看他到底叫什麼(很多小夥伴,本人第一次搞也是,網上代碼一抄,發現tomcat啓動就報類找不到。。。你classname都填錯了,固然找不到了,能找到就奇怪了。。。) 後端


測試:tomcat

一、nginx配置:

upstream mzd{
server 127.0.0.1:8091;
server 127.0.0.1:8090;
}

server {
listen 80;
server_name www.tuesdayma.com;

location / {
proxy_pass http://mzd;
proxy_connect_timeout 3s;
proxy_read_timeout 5s;
proxy_send_timeout 3s;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}


}

二、準備兩個tomcat,一個端口爲8090,一個爲8091

三、tomcat中jsp代碼:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%
request.getSession().setAttribute("mzd","123");
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String date=simpleDateFormat.format(new Date());
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>tomcat1</title>
</head>
<body>
SessionID:<%=session.getId()%>
當前時間爲:<%=date%>
SessionPort:<%=request.getServerPort()%>
mzd的值爲:<%=session.getAttribute("mzd")%>
<%
out.println("這是tomcat1");
%>
</body>
</html>

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page language="java" import="java.text.SimpleDateFormat"%>
<%
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
String date=simpleDateFormat.format(new Date());
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>tomcat2</title>
</head>
<body>
SessionID:<%=session.getId()%>
當前時間爲:<%=date%>
SessionPort:<%=request.getServerPort()%>
mzd的值爲:<%=session.getAttribute("mzd")%>
<%
out.println("這是tomcat2");
%>
</body>
</html>

四、啓動兩個tomcat和redis:若是不啓動redis是會報錯的。。。

結果:


測試結果很明顯,sessionid沒有改變。並且在tomcat1中設置的mzd值在tomcat2中jsp也能拿到這個值。

方法四:使用jwt原理:放棄session機制,使用jwt機制。簡單來講就是userid+隨機數+簽名加密生成一個token,先後端通訊經過token來交互。客戶端第一次請求登入以後,服務器端給客戶端一個token,服務器將token做爲key值,userid做爲value值,30分鐘做爲有效時間存入redis中;客戶端第二次訪問controller以前進行攔截,判斷是否有token,若是有token解密獲取userid,而後取查詢redis,token和userid是否匹配,若是匹配就容許訪問controller,請求返回以後,服務器將從新生成新的token返回給客戶端。簡單來講就是每次請求成功以後token都會改變,token存在redis中,這樣一來至於redis分發到哪一個tomat並不影響,由於token是存在redis中的。。。--------------------- 做者:一隻仰望天空的菜鳥 來源:CSDN 原文:https://blog.csdn.net/tuesdayma/article/details/81387862 版權聲明:本文爲博主原創文章,轉載請附上博文連接!

相關文章
相關標籤/搜索