什么是单点登录:
单点登录又叫做SSO, 是在互相信任的多个系统中, 只需要数据一次用户名密码, 就可以直接登录其他互相
信任的系统.
使用场景(作用):
传统企业项目: 做系统权限集成
互联网项目: soa分布式架构下, 是多个项目, 如果跨项目跳转访问能够自动认证.
传统登录流程:
1. 在登录页面输入用户名密码
2. 在controller中接收用户名密码并且校验是否正确
3. 如果不正确, 跳转到登录页面重新登录
4. 正确, 放行, 并且将用户登录信息记录到tomcat的session中
5. 编写拦截器, 拦截所有请求, 每次请求都判断tomcat的session中是否有用户登录信息
如果没有则跳转到登录页面重新登录, 如果有则放行
问题:
tomcat的session是否能够跨tomcat. 是否能够多个项目共享使用.
不能. session叫做会话, 浏览器, 访问项目, 会建立session会话, 浏览器关闭, 会话销毁.
session无法跨Tomcat使用.
cas是耶鲁大学的一个开源项目, cas是单点登录的一个解决方案.
优点: 是cas, 基本可以不写代码, 就可以实现单点登录. 原理是cas是一个现成的项目 部署到linux系统形成
单点登录服务器, 项目中配置cas的客户端工具包, 就可以不用写代码实现单点登录.
单点登录原理(图解):
CAS登录框架原理
CAS部署到Linux
1.3 CAS服务端部署
Cas服务端其实就是一个war包。
这里有个固定的用户名和密码 casuser /Mellon
登录成功后会跳到登录成功的提示页面
安装步骤详细:
cd /usr/local/
切换到目录下,
mkdir cas
创建cas文件夹
把cas.war ,和tomcat 都 复制到cas目录中,并且把tomcat解压,并且改为容易使用的短名字
注意:复制代码,linux代码篇章去查询
把cas.war 剪切到tomcat/webapps/目录下
mv cas.war tomcat/webapps/
由于tomcat默认端口8080,已经被zookeeper占用,所以要修改为9100. tomcat,中conf/service.xml,的三个端口参数(不能重复),用EditPlus远程连接修改,比用vim方便。
进入tomcat/bin/目录启动tomcat ,启动会自动解压一次webapps目录下的cas.war文件
sh.startup.sh
再次关闭 tomcat
sh.shutdown.sh
再进入,cd/tomcat/webapps/里面删除已经解压过得cas.war,文件。(一定要删,不然下次启动,改过的配置文件就会被覆盖)
rm -rf cas.war
(2)修改CAS配置文件
修改cas的WEB-INF/cas.properties
server.name=http://192.168.200.128:9100
1.4.2去除https认证
CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要SSL安全证书(需向特定的机构申请和购买) 。如果对安全要求不高或是在开发测试阶段,可使用HTTP协议。我们这里讲解通过修改配置,让CAS使用HTTP协议。
(1)修改cas的WEB-INF/deployerConfigContext.xml
找到下面的配置
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" p:requireSecure="false"/>
这里需要增加参数p:requireSecure=“false”,requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用
(2)修改cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml
找到下面配置
<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="3600"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
参数p:cookieSecure=“true”,同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。
参数p:cookieMaxAge="-1",是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不需要验证。
我们这里将cookieSecure改为false , cookieMaxAge 改为3600
(3)修改cas的WEB-INF/spring-configuration/warnCookieGenerator.xml
找到下面配置
<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="3600"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />
我们这里将cookieSecure改为false , cookieMaxAge 改为3600
改完所有配置之后,再次重启tomcat
进入tomcat/bin/目录启动tomcat
sh.startup.sh
最后,进入浏览器:http://192.168.200.128:9100/cas/ 进行测试
单点退出到某个页面的功能
修改cas系统的配置文件WEB-INF目录下的cas-servlet.xml
<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction"
p:servicesManager-ref="servicesManager"
p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>
修改配置文件之后,记住,重启tomcat,
sh.shutdown.sh
sh.startup.sh
改为true后,可以在退出时跳转页面到目标页面,修改index.jsp的退出链接,service=http://www.baidu.com",表示要退出到哪个页面
<a href="http://192.168.200.128:9100/cas/logout?service=http://www.baidu.com">退出登录</a>
————安装步骤结束——————————————————
soa分布式,要求cas远程连接mysql,的相关配置:
—————————步骤开始———
切换目录到cas,tomcat下的WEB-INF/lib存放的jar目录
cd /usr/local/cas/tomcat/webapps/cas/WEB-INF/lib/
把三个关于数据库的jar包,复制进来。
cp /root/cas/jar/c3p0-0.9.1.2.jar ./
cp /root/cas/jar/cas-server-support-jdbc-4.0.0.jar ./
cp /root/cas/jar/mysql