看懂题目的应该都知道要干什么,直接写吧。
一、折腾开始的地方--下载CAS-SERVER
工作需要,要研究单点登录了。当然,身为一个后端er,也是知道cas的存在的,所以就选它了!
下载:这里注意下,这个项目主页的Download提供的版本并不是最新的,得上github找,这里附上链接吧;
截止目前,5.0.X版本已经释放了,但为了响应题目,挑个4.2.X版本(当时我下的是4.2.5版本)。
cas-server除了提供源码下载,也提供一种overlay的构建版本,详细的自行了解,这里选择源码下载,即source code。
二、折腾前需要造个炉--服务器准备
弄个虚拟机吧,没弄好可以重新搭个,省时省力~
Windows或Linux自选;
(重要)服务器的主机名弄个域名,最好的条件在dns服务器上做个给服务器IP做个域名解析,如cas.abc.com。没条件就自己安个dns服务,但我没试过~;
为了避免不必要的错误,jdk请用1.8以上,gradle、maven环境请自行搭建;
弄个tomcat!开启HTTPS,具体做法可参考网上教程,这里给个简略版的: 1. 编辑server.xml,取消注释8443端口的相关代码; 2. 利用jdk的keytool工具生成证书,添加到上面的代码中,生成证书时,当问你名字时,必须填上域名!域名!域名!(因为cas是基于域名进行SSL访问滴); 3. 继续利用keytool导出证书,crt或cer格式,以后配置cas-client备用。
cas-server自带jdbc插件,因此安了个mysql数据库,用来做用户表;
三、开工!
cas-server自4.2.x后,并未单独提供war包了,需要自行编译。而且项目构建工具换成gradle,因此下载源码后,进入cas-4.2.x\cas-server-webapp\后,键入下面命令编译:
gradle assemble
喝杯水,等一会,再进入cas-4.2.x\cas-server-webapp\build\lib里就可以看到war包了,改个名字cas-server,随你喜欢,把它扔进tomcat\webapps里!
好了,现在cas-server初始版弄好了,先在浏览器输入
https://localhost:8443/cas-server/
如无意外,应该可以正常访问了,用初始用户名:casuser,密码:Mellon试试登录,应该是没问题滴。
四、应该让cas-server更好用点
其实我也研究的不多,只是使用了简单数据库连接。让cas-server有个后端数据库,仅此而已。这里的做法没啥特别了,纯粹按照官方文档去做,所以有兴趣研究的还请务必细读官方文档!!
当然,我们得先利用mysql建个库,就叫cas好了,然后在库里面建张表,叫user好了,里面有俩字段,uid,password好了。数据嘛,自行添加,密码暂时用明文存放,加密之类cas-server当然支持,只是偷懒没研究罢了。。
这里,要回到cas-4.2.x\cas-server-support-jdbc里,敲入
gradle build
生成jar包,然后网上下载个mysql-java-connector的jar包,两个一起放在webapps\cas-server\WEB-INF\lib里面。
废话说完了,开始配置cas-server,这里要配置的文件有2个,分别是cas.properties和deployerConfigContext.xml。
首先在cas.properties里添加以下代码段,用来连接mysql数据库:
# == Basic database connection pool configuration ==
database.driverClass=org.postgresql.Driver //改成mysql的驱动
database.url=jdbc:postgresql://database.example.com/cas?ssl=true //cas数据库的连接串
database.user=somebody //数据库用户名
database.password=meaningless //数据库密码
database.pool.minSize=6
database.pool.maxSize=18
# Maximum amount of time to wait in ms for a connection to become
# available when the pool is exhausted
database.pool.maxWait=10000
# Amount of time in seconds after which idle connections
# in excess of minimum size are pruned.
database.pool.maxIdleTime=120
# Number of connections to obtain on pool exhaustion condition.
# The maximum pool size is always respected when acquiring
# new connections.
database.pool.acquireIncrement=6
# == Connection testing settings ==
# Period in s at which a health query will be issued on idle
# connections to determine connection liveliness.
database.pool.idleConnectionTestPeriod=30
# Query executed periodically to test health
database.pool.connectionHealthQuery=select 1
# == Database recovery settings ==
# Number of times to retry acquiring a _new_ connection
# when an error is encountered during acquisition.
database.pool.acquireRetryAttempts=5
# Amount of time in ms to wait between successive aquire retry attempts.
database.pool.acquireRetryDelay=2000
然后在deployerConfigContext.xml里最后端添加这段,用来识别cas.properties里的数据源
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="${database.driverClass}"
p:jdbcUrl="${database.url}"
p:user="${database.user}"
p:password="${database.password}"
p:initialPoolSize="${database.pool.minSize}"
p:minPoolSize="${database.pool.minSize}"
p:maxPoolSize="${database.pool.maxSize}"
p:maxIdleTimeExcessConnections="${database.pool.maxIdleTime}"
p:checkoutTimeout="${database.pool.maxWait}"
p:acquireIncrement="${database.pool.acquireIncrement}"
p:acquireRetryAttempts="${database.pool.acquireRetryAttempts}"
p:acquireRetryDelay="${database.pool.acquireRetryDelay}"
p:idleConnectionTestPeriod="${database.pool.idleConnectionTestPeriod}"
p:preferredTestQuery="${database.pool.connectionHealthQuery}" />
接着注释掉该行:
添加:
然后回到cas.properties里,找到这行:
# cas.jdbc.authn.query.sql=select password from users where username=?
将#号去掉,并根据自己的数据库表更改下就可以了。
最后,重启下tomcat,再次进入cas-server的页面,用数据库表里的用户名与密码登录应该没问题了。
###五、 简单地折腾后
弄完上面的,cas-server就可以用了,比较简单。对于cas的认证方式,官方文档提供了很多选择,如数据库,ldap,oauth等等。而且数据库也有几种Handler解决方案,我没有逐一去试(除了时间关系,其实我是搞不懂,欢迎各位指教~~)。
至于为啥全篇没啥图片。。。不知道,不要问我为什么。
还是说下吧,有转载意向的话。。还请告诉我下吧,谢谢了