【单点登录笔记一】在eclipse+maven中搭建cas-server环境

在eclipse+maven中搭建cas-server环境

单点登录系统的使用还是很广泛的,在之前在微信公众号的开发中就有使用过,但是那时使用的客户端,对服务端的部署,二次开发没有实践。在这里记录下搭建过程。
ps:环境是cas-server-4.2.7

1.单点登录的一般流程

我接触过的单点登录(sso)的流程基本都一致,这里不拘泥于cas,大致记录一下单点登录的登录流程:
1. 用户访问接入sso的应用中需要授权的url地址;
2. 应用拦截到这个请求,发现没有登录,通知客户浏览器重定向到sso地址,同时将原始访问地址当参数用于回调(ps:互联网公司提供的sso可能会要求同意的回调地址,在这种情况下一般会提供一个stge参数,可以用来保存当前状态)。
3. sso收到请求(注意是由客户浏览器发起的),先检查该用户是否已经登陆了sso:已登陆的,直接生成票据回调;未登陆的展示登陆页。
4. 用户登陆成功后在cookies中写入登陆信息,通知客户浏览器重定向到应用服务器的回调地址,附加票据参数。
5. 应用系统收到回调的请求(分统一回调地址和直接原始地址,原始地址的需要增加拦截器实现登陆流程),应用系统访问sso的登陆验证接口,验证票据的有效性,并获取用户信息,并与本应用的用户做关联。
6. 应用服务器返回原始访问地址的内容,对于统一回调地址的,通过stge差数,获取缓存的实际地址,通知客户浏览器重定向,否则自己拦截器放行即可。

2.cas-server的搭建过程

2.1.创建项目

创建一个基于maven的web项目,不在详细介绍,主要我们来看pom.xml

<dependency>
    <groupId>org.jasig.cas</groupId>
    <artifactId>cas-server-webapp</artifactId>
    <version>4.2.7</version>
    <type>war</type>
    <scope>runtime</scope>
</dependency>

加入这一句,这样这个项目就可以执行了,但是cas是限定https访问的,我们需要为tomcat服务器分配证书:
1. 首先获取到一个ssl证书,不管是自己生成,还是从机构申请。
2. 在eclipse的servers项目中找到对应tomcat的配置文件,在server.xml中将这段代码的注释去掉,并配置上证书的路径及密码,以支持https访问

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" keystoreFile="conf/cas.fyuhome.com.jks" keystorePass="yu137267">
</Connector>

好了,现在可以启动项目,通过https和域名访问,发现已经可以展示登陆页面了,效果是这样的。
cas登陆页
默认用户为casuser Mellon

2.3使用数据库管理用户

现在的用户是在配置文件中写死的,在真正使用的时候肯定不能用配置文件管理用户,现在让我们将其改成使用数据库进行用户验证。
cas-server已经提供了一套组件实现了基本的数据库用户验证,只需要改些配置文件即可。
到maven的本地库路径找到cas-server的war包,将war包web-inf目录下的配置文件复制一份到项目resources目录下,只需要拷贝需要修改的,需要拷贝的代码如图所示:
需要拷贝的配置文件
注意这里有个坑 这些配置文件的根是web-info,而resources的默认部署文件夹是web-inf/classes,所以需要修改一下部署配置:
更改部署配置
现在修改配置文件deployerConfigContext.xml,增加如下配置,用于注册jdbc处理组件:

<bean  id="MD5PasswordEncoder"   class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"   autowire="byName">
   <constructor-arg  value="MD5"/>
</bean>
<bean  id="queryDatabaseAuthenticationHandler"  class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
   <property   name="passwordEncoder"    ref="MD5PasswordEncoder"/>
</bean>
 <bean id="dataSource"
    class="com.mchange.v2.c3p0.ComboPooledDataSource"
    p:driverClass="org.postgresql.Driver"
    p:jdbcUrl="jdbc:postgresql://127.0.0.1:5432/cas"
    p:user="cas"
    p:password="123456"
    p:initialPoolSize="6"
    p:minPoolSize="6"
    p:maxPoolSize="18"
    p:maxIdleTimeExcessConnections="120"
    p:checkoutTimeout="10000"
    p:acquireIncrement="6"
    p:acquireRetryAttempts="5"
    p:acquireRetryDelay="2000"
    p:idleConnectionTestPeriod="30"
    p:preferredTestQuery="select 1"/>

数据库配置根据自己的数据库进行修改,这里使用的是postgresql,密码加密规则是md5。
修改deployerConfigContext.xml,将

 <alias name="acceptUsersAuthenticationHandler" alias="primaryAuthenticationHandler" />

修改为

<alias name="queryDatabaseAuthenticationHandler" alias="primaryAuthenticationHandler" />

使之前新加的配置生效
另外修改一下cas.properties,增加查询使用的sql

cas.jdbc.authn.query.sql=select passwd  from  "sampleUser"  where "userName"=?

现在登陆数据库,建立相应的表,确保sql可以正常执行,在表中行政一个用户,注意密码需要md5加密后的。
现在,重启项目,应该已经可以使用数据库中的账号进行登陆。
这里插入一句,cas高版本客户端也需要支持https,如果需要支持http需要修改HTTPSandIMAPS-10000001.json
改为

"serviceId" : "^(https|imaps|http)://.*",

3.自定义实现用户验证

要自定义验证用户名密码,只需要参考org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler 实现AbstractUsernamePasswordAuthenticationHandler接口,再修改下配置文件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值