单点登录系列之tomcat会话共享实现单点登录

在开发中的开源项目JeePlatform:https://github.com/u014427391/jeeplatform
欢迎start(s收藏),打算集成单点登录到自己的开源项目里,所以先搭建环境

【集群简介】
使用nginx作为负载均衡,使用redis存储tomcat session,来实现集群中tomcat session的共享,使用redis作为cas ticket的仓库,来实现集群中cas ticket的一致性。

这里写图片描述

【安装教程】
【keepalived安装】
下载keepalived到/usr/local/src

tar -xzvf keepalived-1.2.19.tar.gz
cd /usr/local/src/keepalived-1.2.19

配置

./configure --prefix=/usr/local/keepalived

编译

make && make install

复制建立服务启动脚本,以便使用service命令控制之:

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
chmod +x /etc/init.d/keepalived
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

启动keepalived

service keepalived start|stop

【nginx安装】
nginx安装之前要先安装pcre、openssl、zlib

注意:./configure --prefix=/usr/local/keepalived configure:error:!!!
OpenSSL is not properly installed on your system. !!! !!! Can not
include OpenSSL headers files.
解决方法:安装openssl,同时pcre也一起安装一下,gcc、zlib没有安装也可以安装一下

yum -y install pcre pcre-devel openssl openssl-devel zlib* gcc

解压
下载nginx到/usr/local/src

tar -xzvf nginx-1.11.4.tar.gz
cd nginx-1.11.4

执行配置文件

./configure

编译

make && make install

启动

cd /usr/local/nginx/sbin
./nginx

重启

cd /usr/local/nginx/sbin
./nginx -s reload

检验配置文件是否正确
检验:

ps -ef|grep nginx
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf

或者

cd /usr/local/nginx/sbin
./nginx -t

【Tomcat集群】
tar -xzvf apache-tomcat-7.0.82.tar.gz
cp -r apache-tomcat-7.0.82 tomcat2
mv apache-tomcat-7.0.82 tomcat1
修改其中一个tomcat的配置文件:vi conf/server.xml

<Server port="8005"shutdown=“SHUTDOWN”> 改为 8006 <Connector
port="8080"protocol=“HTTP/1.1” 改为 8081 <Connector
port="8009"protocol=“AJP/1.3” 改为 8010

创建tomcat应用文件夹
mkdir /opt/tomcat1/webapps/www
mkdir /opt/tomcat2/webapps/www

在www文件夹上传index.jsp测试文件

<%@ page language="java" %>
<html>
  <head><title>Tomcat1</title></head>
  <body>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
sessionID:<%=session.getId()%>
<br>
SessionIP:<%=request.getServerName()%>
<br>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 1");
%>

访问Tomcat1:http://ip1:8080/www/index.jsp,测试是否成功
同理,在tomcat2的www文件夹里也上传index.jsp测试文件

<%@ page language="java" %>
<html>
  <head><title>Tomcat2</title></head>
  <body>
    <table align="centre" border="1">
      <tr>
        <td>Session ID</td>
        <td><%= session.getId() %></td>
      </tr>
      <tr>
        <td>Created on</td>
        <td><%= session.getCreationTime() %></td>
     </tr>
    </table>
  </body>
</html>
sessionID:<%=session.getId()%>
<br>
SessionIP:<%=request.getServerName()%>
<br>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 2");
%>

访问Tomcat2:http://ip2:8081/www/index.jsp
给Tomcat启动文件添加权限

cd /opt/tomcat1/bin && chmod u+x *.sh
cd /opt/tomcat2/bin && chmod u+x *.sh

cd到tomcat的bin目录下面,启动
./startup.sh

【Redis安装】
因为RocketMQ是基于Java开发的,所以安装RocketMQ之前,我们需要先安装JDK,因为服务器一般采用Linux,所以本博客只介绍基于Linux系统的教程
1.在/usr/目录下创建java目录
mkdir /usr/java
进入java目录
cd /usr/java
2.下载jdk到/usr/java目录,然后tar解压(可以使用xftp在本地下载jdk,或者使用命令curl -O url下载)
tar -zxvf jdk-8u102-linux-x64.tar.gz
3.设置环境变量vi编辑
vi /etc/profile
profile文件加入如下配置,如何按esc退出,:wq!保持

export JAVA_HOME=/usr/java/jdk1.8.0_102
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib

让修改生效
source /etc/profile
验证jdk有效性
java -version
假如系统有安装yum,就可以直接使用yum install java-1.7.0-openjdk下载jdk
设置环境变量,其它操作同上

export JAVA_HOME=/usr/java/jdk1.8.0_102
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib

然后开始Redis安装
下载文件:
wget http://download.redis.io/releases/redis-3.2.8.tar.gz
解压
tar xzf redis-3.2.8.tar.gz

cd redis-3.2.8

编译:make

如果遇到以下截图中的报错,将make改为make MALLOC=libc;

这里写图片描述

可手动拷贝redis-server、redis-cli、redis-check-aof、redis-check-dump等至/usr/local/bin目录下,也可执行make install
Redis配置
负责初始化文件到/etc/rc.d/init.d/redis
cp /usr/local/src/redis/utils/redis_init_script /etc/rc.d/init.d/redis

chmod +x /etc/init.d/redis

mkdir -p/etc/redis/
cp redis.conf /etc/redis/6379.conf
#!/bin/sh 
#添加改配置
#chkconfig: 2345 80 90 
# Simple Redis init.d script conceived to work on Linux systems 
# as it does use of the /proc filesystem. 

REDISPORT=6379
#修改Redis-server路径 
EXEC=/usr/local/redis/bin/redis-server 
#修改Redis-cli路径
CLIEXEC=/usr/local/redis/bin/redis-cli 

PIDFILE=/var/run/redis_${REDISPORT}.pid 
CONF="/etc/redis/${REDISPORT}.conf" 

case "$1" in 
    start) 
        if [ -f $PIDFILE ] 
        then 
                echo "$PIDFILE exists, process is already running or crashed" 
        else 
                echo "Starting Redis server..." 
                $EXEC $CONF & #加入&符号,使Redis服务后台运行
        fi 
        ;; 
    stop) 
        if [ ! -f $PIDFILE ] 
        then 
                echo "$PIDFILE does not exist, process is not running" 
        else 
                PID=$(cat $PIDFILE) 
                echo "Stopping ..." 
                $CLIEXEC -p $REDISPORT shutdown 
                while [ -x /proc/${PID} ] 
                do 
                    echo "Waiting for Redis to shutdown ..." 
                    sleep 1 
                done 
                echo "Redis stopped" 
        fi 
        ;; 
    *) 
        echo "Please use start or stop as first argument" 
        ;; 
esac 
 注意:添加&符号的作用是使Redis服务后台运行,否则,启动Redis服务时,占据在前台,占用了主用户界面,造成其它的命令执行不了

添加Redis服务
chkconfig --add redis

设置Redis全局
vi /etc/profile

export PATH="$PATH:/usr/local/redis/bin"

. /etc/profile

建议(本博客还是默认使用6379端口):将/etc/redis/6379.conf这个文件下载到本地,然后修改下面截图中的配置信息,端口号一定要修改,如果使用默认的端口号,放到阿里云上面会被植入木马,导致cpu一直100%;
这里写图片描述
默认是只有127.0.0.1的ip能访问Redis服务器的,即本机,要远程使用必须注释下面一行
这里写图片描述
添加日志文件路径,记得创建相关目录
设置一下Redis的密码
这里写图片描述
Redis启动
service redis start

检测Redis是否启动

ps -ef | grep redis

Redis客户端使用

redis-cli

这里可以使用RedisDesktopManager客户端软件连接Redis服务器

【Nginx负载均衡】
cd /usr/local/nginx/conf,找到nginx.cong配置文件
在http{}里面加入,ip1就是你的一台服务器的ip,ip2同理

upstream  mynginxserver{
server ip1:8080 weight=1 max_fails=1 fail_timeout=10s;
server ip2:8081 weight=2 max_fails=1 fail_timeout=10s;
}

upstream可以自己定义名称

然后再http{}的server{}里修改,加入proxy_pass

location / {
        proxy_pass http://mynginxserver;
            root   html;
            index  index.html index.htm index.jsp;
        }

然后重启nginx
重启
cd /usr/local/nginx/sbin
./nginx -s reload

这时就可以实现nginx反向代理了
访问Tomcat1:http://ip1:8080/www/index.jsp
访问Tomcat2:http://ip2:8081/www/index.jsp
访问nginx代理的tomcat集群:http://ip1/www/index.jsp

刷新页面发现,tomcat1和tomcat2的页面会切换,但是sessionID是会变的,然后我们实现基于Redis的会话共享

【Redis会话共享】
下载实现Redis+Tomcat会话共享的jar,commons-logging-1.2.jar、commons-pool2-2.4.2.jar、jedis-2.8.2.jar、tomcat-redis-session-manage-tomcat7.jar、tomcat-juli.jar、tomcat-juli-adapters.jar
copy这些jar到tomcat的lib文件夹下面,再将tomcat-juli.jar、tomcat-juli-adapters.jar放在bin文件夹下面
在tomcat的conf的context.xml的里加入如下配置

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />    
	<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"    
             host="127.0.0.1"    
             port="6379"   
             database="0"
			 password="redis密码"
             maxInactiveInterval="60" /> 

刷新页面发现,tomcat1和tomcat2的页面会切换,但是sessionID的不变的,说明Session共享实现了

参考教程:

单点登录集群:https://www.cnblogs.com/zhengbin/p/5488415.html
Redis安装教程:http://blog.csdn.net/ludonqin/article/details/47211109
Tomcat+Nginx+Redis会话共享实现:http://blog.csdn.net/grhlove123/article/details/48047735
Tomcat+Nginx+Redis实现负载均衡、会话共享:
https://www.cnblogs.com/zhrxidian/p/5432886.html

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
源码简介与安装说明: MaxKey(马克思的钥匙)用户单点登录认证系统(Sigle Sign On System),寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。 MaxKey主要功能: 1、所有应用系统共享一个身份认证系统 2、所有应用系统能够识别和提取ticket信息 3、提供标准的认证接口以便于其他应用集成SSO,安全的移动接入,安全的API、第三方认证和互联网认证的整合。 4、提供用户生命周期管理,支持SCIM 2协议,基于Apache Kafka代理,通过连接器(Connector)实现身份供给同步。 5、认证中心具有平台无关性、环境多样性,支持Web、手机、移动设备等, 如Apple iOS,Andriod等,将认证能力从B/S到移动应用全面覆盖。 6、多种认证机制并存,各应用系统可保留原有认证机制,同时集成认证中心的认证;应用具有高度独立性,不依赖认证中心,又可用使用认证中心的认证,实现单点登录。 7、基于Java平台开发,采用Spring、MySQL、Tomcat、Apache Kafka、Redis等开源技术,支持微服务,扩展性强。 8、许可证 Apache License, Version 2.0,开源免费。 源码更新日志: MaxKey单点登录认证系统 更新v2.4.0 动态用户组实现(基于用户属性或机构) 任职机构和兼职机构 登录会话切换的优化 我的应用界面隐藏visible = 0的应用 构建脚本的优化和更新 全新的版本号定义,正式版本jar不再添加 RELEASE 后缀声明,author由shimingxy改为maxkeyTop SAML2.0 SP登录引导的优化 SAML2.0 SP DEMO,案例参见 https://github.com/MaxKeyTop/spring-boot-security-saml-sample docker支持的优化 源代码增加LICENSE声明 JWT的分离成protocols下子项目 密码策略提示参数问题修复 SAML 2.0 Metadata优化 HandlerInterceptorAdapter@deprecated 调整为 AsyncHandlerInterceptor mybatis-jpa升级,添加@Entity和@Transient支持,优化update时字段为null的处理,SQL代码优化 README更新及中文和英文支持 认证失败时,authentication 空指针异常 SAML Metadata URL配置读取 添加组和角色时按登录名查询成员 firefox点击验证码无更新修复 官网内容更新 管理MGT样式调整优化 依赖jar引用、更新和升级
### 回答1: CAS(Central Authentication Service)是一种单点登录协议,它允许用户一次登录即可在多个应用程序中进行身份验证和授权。要使用CAS完成单点登录,您需要在服务器上安装CAS服务器,并将其配置为您的应用程序可以使用的身份验证源。在您的应用程序中,您需要使用CAS客户端库来与CAS服务器进行通信,以验证用户身份和授权访问。用户通过CAS登录后,应用程序将从CAS服务器获取身份验证令牌,以便在用户访问应用程序时进行身份验证。这样,用户就可以在不需要再次输入凭据的情况下访问多个应用程序了。 ### 回答2: CAS(Central Authentication Service)是一种基于标准协议的单点登录解决方案,用于在多个应用系统中实现一次登录多次访问的功能。以下是使用CAS完成单点登录的步骤: 1. 部署CAS服务器:首先,需要搭建CAS服务器。可以选择使用开源的CAS服务器实现,如Apereo CAS或Jasig CAS。将CAS服务器安装在Web容器中,如Tomcat。 2. 配置CAS服务器:在CAS服务器上配置相关参数,包括CAS服务端口、证书、认证方式等。还需配置相应的用户认证方式,如LDAP、数据库等,以便CAS从这些认证源中验证用户身份。 3. 配置应用系统:将需要实现单点登录的应用系统配置为CAS客户端。CAS客户端负责与CAS服务器进行通信并获取用户认证信息。在应用系统的配置文件中,设置CAS服务器的地址和端口,并指定CAS授权和认证回调URL。 4. 用户访问应用系统:当用户访问某个应用系统时,应用系统检测用户是否已登录。若未登录,则将用户重定向至CAS服务器进行认证。 5. CAS认证流程:用户在CAS服务器上输入用户名和密码进行认证。CAS服务器通过预先配置的认证方式,如LDAP或数据库,验证用户身份的合法性。若认证成功,则CAS服务器生成一个票据(ticket),并将用户重定向至应用系统的回调URL,并在URL中附带生成的票据。 6. 应用系统认证处理:应用系统接收到CAS服务器回调的URL,提取URL中的票据信息。应用系统通过与CAS服务器的通信,校验票据的有效性。若票据有效,则应用系统将用户标识为已认证,完成单点登录。 7. 单点退出:当用户在某个应用系统中执行退出操作时,应用系统将用户重定向至CAS服务器进行单点退出。CAS服务器会通知其他已登录的应用系统将用户标记为已退出,并且跳转到CAS服务器的退出页面。 通过CAS实现单点登录,用户只需登录一次,即可访问多个应用系统,提高了用户体验,减少了重复登录的繁琐。同时,也可以提高安全性和统一管理性,减少密码泄露的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

smileNicky

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

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

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

打赏作者

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

抵扣说明:

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

余额充值