CAS&SSO&SpringSecurity-CAS

SSO single sign on 单点登录
CAS Central Authentication Service 中央认证服务
在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统

session是存储在单个系统的,多个系统间的session不能共享,如果多个系统间session之间进行两两的信息交互,可能会出现session风暴.

另外可以将用户的登录信息存储在一个第三方的软件中,比如redis,用户登录到每个系统先去redis中查看它是否已经在其他信任的系统中登录.但是不建议.

现在用的最多的就是CAS服务器来实现SSO(单点登录)

单点登录的原理:
首先明确几个概念 CAS是单点登录的服务器 网站的每个服务器都是单点登录服务器的客户端 用户的浏览器
1.浏览器第一次访问网页服务器(单点登录客户端),网站服务器发现用户未登录,告诉它CAS服务器的地址,让它去登录
2.用户浏览器找到CAS服务器,CAS服务器给它发放票据并携带浏览器访问资源的路径(过程有两次交互)
3.用户浏览器又去访问第一次访问的网页服务器,网页服务器拿到它的票据后找CAS服务器验证票据是否有效,有效返回其请求的资源,无效则不返回访问资源
4.用户又去访问其他互相信任的服务器,服务器拿到票据后找CAS服务器进行验证有效返回其请求的资源,无效则不返回访问资源…

CAS服务器是需要独立部署的web应用 War包(solr也是,独立的服务器)

一个tomcat有三个端口,如果一台电脑上想启动多个tomcat需要同时修改三个端口,才能启动起来而不至于报端口占用异常.三个端口分别是访问端口号,监听关闭的端口号和接受其他服务器转过来的请求的端口号

SSL Secure Sockets Layer 安全套接层
cas默认使用的https协议,但在我们测试和自己练习的过程中,一般使用http协议(因为HTTPS协议需要ssl安全证书,需要向特定的机构申请和购买),在cas服务器改成http协议的步骤:

  1. 修改cas的WEB-INF/deployerConfigContext.xml 在 认证处理器中添加p标签 p:requireSecure=“false” 即不使用安全验证
    2.修改cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

    将第一个p标签改为 false(取消安全验证)
    第二个p标签 默认cookie是网页一关闭就失效(我们浏览器网页关闭了,其票据失效,那么访问其他相互信任的服务器还需再次认证,为避免这个情况,可以修改一个默认值比如3600即1小时)
    3.修改cas的WEB-INF/spring-configuration/warnCookieGenerator.xml

    修改同上
    4.修改完毕后重启cas服务器

想要实现单点登录,启动了cas服务器后还需要在cas客户端(即我们的服务器)进行配置,导入cas-client jar包,配置web.xml文件
主要有以下几个配置
1.配置cas认证过滤器 设置cas服务器登录地址 及 认证后的服务器地址(即我们的服务器)
2.票据验证过滤器 设置cas服务器地址前缀 及 验证后的服务器地址(即我们的服务器)
3.单点登出session监听器 及单点登出过滤器,以实现一个服务器登出,所有的服务器都登出
4.request包装过滤器 配置后可以在request域中通过getRemoteUser() 获取到当前用户名(可选)
5.AssertionThreadLocalFilter 配置它以后可以在任意层通过 AssertionHolder来获取到用户信息(可选)

在页面中可以设置退出按钮 超链接为: http://localhost:9100/cas/logout 这样默认是退出到cas服务器的退出页面,如果我们想要退出到我们自己的想要的页面可以在后面加内容
如:http://localhost:9100/cas/logout?service=http://www.baidu.com 但是需要在修改cas服务器的配置文件cas-servlet.xml将
最后的false改为TRUE这样就可以了

cas服务器用户数据的更改,原来服务器的登录用户是默认的配置在配置文件中的,但是我们实际业务中的用户肯定是从数据库查询,所以要对配置文件进行修改
1.将原始的用户认证处理器注释掉
2.配置新的数据库查询的认证处理器,并将认证管理器中认证处理器的引用替换掉



3.将c3p0的jar包,mysql驱动的jar包,以及cas服务器支持jdbc的jar包放到cas的lib文件夹中
4.重新启动即可

登录页面的改造
每次访问网页都需要先进行cas服务器认证,它的认证页面是默认的,我们需要改成自己的服务器登录页面,那么页面样式都采用自己的,而内部的逻辑采用cas的首页,改造一下,步骤如下:
1.将我们的登录页面改成cas登录页面的名字,并把需要的js css 文件放到cas 文件夹下
2.将cas登录页的指定粘贴到我们的首页
<%@ page pageEncoding=“UTF-8” %>
<%@ page contentType=“text/html; charset=UTF-8” %>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@ taglib prefix=“spring” uri=“http://www.springframework.org/tags” %>
<%@ taglib prefix=“form” uri=“http://www.springframework.org/tags/form” %>
<%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>
3.修改form标签\用户名输入框\密码输入框\登录按钮 将cas登录页的表单\输入框及按钮赋值过来,样式换成我们的
4.将错误提示框也复制过来,不过它的提示信息是英文的,此处需要修改国际化配置
修改cas-servlet.xml 设置国际化为zn_CN 默认是en
这个提示信息是在WEB-INF\classes目录下的messages.properties文件中 这就是英文的配置文件,查看messages_zh_CN.properties中文配置文件中并没有配置此异常,需手动配置(中文需转成Unicode编码)
authenticationFailure.AccountNotFoundException=\u7528\u6237\u4E0D\u5B58\u5728.
authenticationFailure.FailedLoginException=\u5BC6\u7801\u9519\u8BEF.
5.重启服务器即完成

cas中过滤器的配置顺序,1.先配置request包装过滤器 2配置登出过滤器 3.配置认证过滤器 4.配置票据验证过滤器 必须按照这个顺序,如果不先配置登出过滤器的话,会发现退了再次访问,还是登录状态

在spring和cas的整合过程中有一个custom-filter 其中position属性是指将过滤器放在指定位置,before是指放在指定过滤器之前 after是指放在指定过滤器之后

springsecurity和cas整合步骤
1.首先是导入jar包 cas的客户端 springsecurity和cas整合的jar包
2.在web.xml中配置SpringSecurity过滤链及加载springsecurity的配置文件.此时的cas的各种过滤链配置到Springsecurity配置文件中(即配置到过滤链的具体位置中)
3.访问的过程中security负责拦截所有请求并确认是否登录,如果没有登录则通过配置的入口点找到cas服务器进行登录并返回本服务器进行认证授权,具备权限后就可以访问相应的资源了
4.配置主要分几个点 1.springsecurity的拦截路径 2.入口点 3.casrequest登出过滤器 4.cas登出过滤器 5.cas认证过滤器
5.其次就是每个点的具体配置 cas认证过滤器中有认证管理器 管理器中有认证提供者,认证提供者里面配置具体的认证类 及票据验证类
6.现在创建的认证类就只负责封装登录用户的权限到认证对象中(而只有security的时候换需要负责访问数据库进行认证),因为cas已经进行了用户的登录验证,能走到这的只是需要封装它的角色信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值