最近一直在折腾cas这个开源项目的应用,虽然在大神眼里,它有很多缺陷,但是对于很多人来说,还是一个能个使用的项目,毕竟自己构造轮子需要的水平太高。
做的过程中参考了很多大神的帖子,现在总结写篇文章,总结一下CAS配置过程中需要注意的地方和值得参考的地方,以便巩固知识,帮助他人。
1.JDK(jdk1.7.0_79)
2.Tomcat(apache-tomcat-7.0.67-windows-x64)
3.CAS-Server(cas-server-3.4.11-release)
4.CAS-Client(cas-client-3.2.1-release)
JDK与Tomcat的下载网址就不说了,
cas-server可以到这个网址下载:http://developer.jasig.org/cas/
cas-client可以到这个网址下载:http://developer.jasig.org/cas-clients/
主要的参考文章有这两位大神的:
1、http://www.micmiu.com/enterprise-app/sso/sso-cas-sample/
2、http://my.oschina.net/huangyong/blog/198109?fromerr=a6GUlk1H
这两篇文章都写的很好,第一篇文章更清晰一些,包括配置hosts文件,修改端口的命名方法很清晰,重点参考。
但是第一个教程里面有个错误就是在客户端导入命令那里,导入的源路径和目的路径写反了,修改一下就可以了,下面我把具体的命令贴出来:
//1、生成证书
keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass michaelpwd -validity 365 -keystore d:\sso\ssodemo.keystore -storepass michaelpwd
//2、导出证书
keytool -export -alias ssodemo -keystore d:\sso\ssodemo.keystore -file d:\sso\ssodemo.crt -storepass michaelpwd
//3、客户端导入证书
keytool -importcert -alias ssodemo -file d:\sso\ssodemo.crt -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -noprompt
然后就是修改tomcat等配置文件的工作了。这里还设计到一个同一机器开启多个tomcat进行测试的问题,可以参考之前的一篇文章,很详细,
地址如下:http://blog.csdn.net/tangxiaolang101/article/details/50401317
按照两位大神的帖子和上面提到的注意事项,应该能够很快的配置成功,可能比较麻烦的就是cas-client引用以后,对web.xml文件添加过滤器会出问题,这里注意的就是修改web.xml文件记得重启一下tomcat,否则有时候会出bug。
这个配置方法有多种,网上大多数倒是用的maven来配置,不过这个东西要是网不好,或者eclipse版本不太对,容易出问题,我是折腾了很久也没有跑通。然后,就找了一种简便的配置方法,
参考地址如是:http://www.docin.com/p-1043355849.html
运用这个配置方法配置完成后,记得访问项目的地址是:http://localhost:8080/testCas
在端口后面要加上项目名称,要不是找不到的。
这个应该是绝大多数使用cas的小伙伴们都要配置应用的,可以参考大神的操作,
参考网址是:http://www.micmiu.com/enterprise-app/sso/cas-server-auth-db/
里面介绍了具体的操作流程,
1. 创建数据库;
2. 修改服务器端的webapps/cas/WEB_INF/deployerConfigContext.xml 文件;
3. 添加相关的jar包。
数据库的创建三段的结尾我分享了一个网盘文件,里面有sql文件,用了创建这个数据库。
deployerConfigContext.xml 文件也在网盘分享文件中。
相关的两个jar包入下图:
第一个cas-server-3.4.11\modules这个目录下可以找到;
第二个到网上搜一个就可以了。
下载下来都添加到工程的WEB-INF/lib目录下面去。
配置文件我做了一份网盘的,分享在这里:https://yunpan.cn/cuWFTIsXWZGar 访问密码 e014
Auditing and Statistics Via Inspektr是由Marvin Addison创建的,可以如来存储一下这些信息:
Audit trail record BEGIN =============================================================
WHO: [username: admin]
WHAT: TGT-1-bG4eZcSgsaFR0tTXPOvmheYfmcLsGgaUL3zeiFTJQIQ2U7tvHn-cas
ACTION: TICKET_GRANTING_TICKET_CREATED APPLICATION: CAS WHEN: Tue Jan 05 14:12:02 CST 2016 CLIENT IP ADDRESS: 127.0.0.1 SERVER IP ADDRESS: 127.0.0.1 =============================================================
cas-server-3.4.11-release这个版本,相应的jar是已经有了的。如下图:
主要来修改WEB-INF.spring-configuration.auditTrailContext.xml和deployerConfigContext.xml这两个文件。其中deployerConfigContext.xml文件在第三步中已经进行了设置,就不用再搞了,直接用就可以了。auditTrailContext.xml这个配置文件在第三步的分享中也是有的,可以直接用。数据库就是第三步中分享里的那个sql文件生成的数据库。还是贴一下具体步骤吧,
1、创建数据库
因为第三步中的sql文件已经创建了这步所需要的com_audit_trail和com_statistics两张表,所以就不需要操作了;
2、修改deployerConfigContext.xml文件。
这个文件也是接着用第三步的就可以了。
3、修改auditTrailContext.xml文件,文件源码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<description>
Configuration file for the Inspektr package which handles auditing for Java applications.
If enabled this should be modified to log audit and statistics information the same way
your local applications do. The default is currently to log to the console which is good
for debugging/testing purposes.
</description>
<aop:aspectj-autoproxy/>
<bean id="auditTrailManagementAspect" class="com.github.inspektr.audit.AuditTrailManagementAspect">
<!-- String applicationCode -->
<constructor-arg index="0" value="CAS" />
<!-- PrincipalResolver auditablePrincipalResolver -->
<constructor-arg index="1" ref="auditablePrincipalResolver" />
<!-- List<AuditTrailManager> auditTrailManagers -->
<constructor-arg index="2">
<list>
<!-- <bean class="com.github.inspektr.audit.support.ConsoleAuditTrailManager" />-->
<!-- Uncomment following for writing logs to database via JDBC. See below for definition of auditManager bean. -->
<!--存入数据库操作 -->
<ref local="auditManager" />
</list>
</constructor-arg>
<!-- Map<String,AuditActionResolver> auditActionResolverMap -->
<constructor-arg index="3">
<map>
<entry key="AUTHENTICATION_RESOLVER">
<ref local="authenticationActionResolver" />
</entry>
<entry key="CREATE_TICKET_GRANTING_TICKET_RESOLVER">
<ref local="ticketCreationActionResolver" />
</entry>
<entry key="DESTROY_TICKET_GRANTING_TICKET_RESOLVER">
<bean class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver" />
</entry>
<entry key="GRANT_SERVICE_TICKET_RESOLVER">
<ref local="ticketCreationActionResolver" />
</entry>
<entry key="GRANT_PROXY_GRANTING_TICKET_RESOLVER">
<ref local="ticketCreationActionResolver" />
</entry>
<entry key="VALIDATE_SERVICE_TICKET_RESOLVER">
<ref local="ticketValidationActionResolver" />
</entry>
<entry key="DELETE_SERVICE_ACTION_RESOLVER">
<ref local="deleteServiceActionResolver" />
</entry>
<entry key="SAVE_SERVICE_ACTION_RESOLVER">
<ref local="saveServiceActionResolver" />
</entry>
</map>
</constructor-arg>
<!-- Map<String,AuditResourceResolver> auditResourceResolverMap -->
<constructor-arg index="4">
<map>
<entry key="AUTHENTICATION_RESOURCE_RESOLVER">
<bean class="org.jasig.cas.audit.spi.CredentialsAsFirstParameterResourceResolver" />
</entry>
<entry key="CREATE_TICKET_GRANTING_TICKET_RESOURCE_RESOLVER">
<ref local="returnValueResourceResolver" />
</entry>
<entry key="DESTROY_TICKET_GRANTING_TICKET_RESOURCE_RESOLVER">
<ref local="ticketResourceResolver" />
</entry>
<entry key="GRANT_SERVICE_TICKET_RESOURCE_RESOLVER">
<bean class="org.jasig.cas.audit.spi.ServiceResourceResolver" />
</entry>
<entry key="GRANT_PROXY_GRANTING_TICKET_RESOURCE_RESOLVER">
<ref local="returnValueResourceResolver" />
</entry>
<entry key="VALIDATE_SERVICE_TICKET_RESOURCE_RESOLVER">
<ref local="ticketResourceResolver" />
</entry>
<entry key="DELETE_SERVICE_ACTION_RESOLVER">
<ref local="returnValueResourceResolver" />
</entry>
<entry key="SAVE_SERVICE_RESOURCE_RESOLVER">
<ref local="returnValueResourceResolver" />
</entry>
<entry key="DELETE_SERVICE_RESOURCE_RESOLVER">
<ref local="deleteServiceResourceResolver" />
</entry>
<entry key="SAVE_SERVICE_RESOURCE_RESOLVER">
<ref local="saveServiceResourceResolver" />
</entry>
</map>
</constructor-arg>
</bean>
<bean id="saveServiceResourceResolver" class="com.github.inspektr.audit.spi.support.ParametersAsStringResourceResolver" />
<bean id="deleteServiceResourceResolver" class="org.jasig.cas.audit.spi.ServiceManagementResourceResolver" />
<bean id="saveServiceActionResolver" class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
<constructor-arg index="0" value="_SUCCEEDED" />
<constructor-arg index="1" value="_FAILED" />
</bean>
<bean id="deleteServiceActionResolver" class="com.github.inspektr.audit.spi.support.ObjectCreationAuditActionResolver">
<constructor-arg index="0" value="_SUCCEEDED" />
<constructor-arg index="1" value="_FAILED" />
</bean>
<bean id="auditablePrincipalResolver" class="org.jasig.cas.audit.spi.TicketOrCredentialPrincipalResolver">
<constructor-arg index="0" ref="ticketRegistry" />
</bean>
<bean id="authenticationActionResolver" class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
<!-- String successSuffix -->
<constructor-arg index="0" value="_SUCCESS" />
<!-- String failureSuffix -->
<constructor-arg index="1" value="_FAILED" />
</bean>
<bean id="ticketCreationActionResolver" class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
<!-- String successSuffix -->
<constructor-arg index="0" value="_CREATED" />
<!-- String failureSuffix -->
<constructor-arg index="1" value="_NOT_CREATED" />
</bean>
<bean id="ticketValidationActionResolver" class="com.github.inspektr.audit.spi.support.DefaultAuditActionResolver">
<!-- String successSuffix -->
<constructor-arg index="0" value="D" />
<!-- String failureSuffix -->
<constructor-arg index="1" value="_FAILED" />
</bean>
<bean id="returnValueResourceResolver" class="com.github.inspektr.audit.spi.support.ReturnValueAsStringResourceResolver" />
<bean id="ticketResourceResolver" class="org.jasig.cas.audit.spi.TicketAsFirstParameterResourceResolver" />
<!--writing logs to database via jdbc -->
<bean id="inspektrTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" />
<bean id="inspektrTransactionTemplate" class="org.springframework.transaction.support.TransactionTemplate" p:transactionManager-ref="inspektrTransactionManager" p:isolationLevelName="ISOLATION_READ_COMMITTED" p:propagationBehaviorName="PROPAGATION_REQUIRED" />
<bean id="auditManager" class="com.github.inspektr.audit.support.JdbcAuditTrailManager">
<constructor-arg index="0" ref="inspektrTransactionTemplate"/>
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
里面用中文给出了修改的地方,已经修改的作用,这样第四步也完成了。
暂时就这四步,接下来应该还会有第五步/第六步。。。。慢慢更新!!!