CASClient3.2.1配置详解
CAS Client 3.2.1 配置详解
摘要: CAS作为开源的单点登陆框架已经⾮常的流⾏了。由于它对已有系统的⼊侵性⼩,⽀持的语⾔多,备受⼴⼤开发者关注;
CAS作为开源的单点登陆框架已经⾮常的流⾏了。由于它对已有系统的⼊侵性⼩,⽀持的语⾔多,备受⼴⼤开发者关注;也是很多公司将之作为单点登陆的⾸选框架。关于CAS如何搭建的⽂章,⽹上已经⾮常多了,随便搜搜都⼀⼤堆。我也就不再写些重复的东西了,但是⽹上的东西有时候常常是不全,或版本问题搞的很多⼈都很迷糊。我曾经也很迷糊,如果刚接触CAS,请你继续往下看;如果你是CAS⾼⼿,请指正我说错的地⽅。
⼀个完整的单点登陆⽅案分两部分
CAS server
CAS server如何配置就不多说了,基本的步骤就是
1. 下载CAS server包
2. 配置Tomcat的Https访问设置
param name3. 部署CAS server,其实就是将.war⽂件拷贝到Tomcat⽬录下
4. ⽣成证书(可以买,也可以使⽤⾃签名证书,或者⼲脆就⽤http协议,那就不需要证书了)
5. 修改⽤户访问配置(CAS⽀持关系数据库,LDAP等多种数据存储)
CAS client
CAS client是部署在应⽤端的,因为通常单点登陆都会涉及到对已有系统的改造。所以,client端的侵⼊性就变的很重要。侵⼊性越⼩,越容易部署和测试。CAS框架的优点之⼀就在于它的client端对应⽤系统的侵⼊性⽐较⼩。对于Java的Web项⽬来说,你只需要在l⾥⾯添加⼀个filter,拷贝CAS client的jar包到应⽤系统,然后改造登陆认证过程即可。如果CAS server⽤的是Https,那就还需要将证书导⼊到JVM的可信证书域中,通常是($JAVA_HOME/lib/security/cacerts)。
所有的⼀切看着都挺简单的,但实际部署中你会遇到各式各样的问题。有很多问题⽹上都有⼈解答,这⾥我就记录⼀下我遇到的⼀个没到答案的问题?
现象:
当你配置完CAS server, 也部署了CAS client后。⽤https登陆CAS server也都没问题时,⽽你⽆论如何都⽆法在登陆后跳转到你期待的页⾯。尽管⼀切看起来都配置对了,证书也导了,https也配了,filter也加了。但是还是不停的抛CAS ticket validation expection, CAS server no response错误。
解决⽅案:
请检查你的client是否把4个filter都配置全了,并且顺序要对。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<!-- CAS SSO -->
<filter>
<filter-name>CAS Authentication Filter</filter-name>
<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class> <init-param>
<param-name>casServerLoginUrl</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>renew</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>gateway</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
71 72
<init-param>
<param-name>serverName</param-name>
<param-value></param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS Validation Filter</filter-name>
<filter-class>
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter </filter-class>
<init-param>
<param-name>casServerUrlPrefix</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>serverName</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>useSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>redirectAfterValidation</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
</filter-class>
</filter>
<filter>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<filter-class>
org.jasig.cas.client.util.AssertionThreadLocalFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>CAS Authentication Filter</filter-name>
<url-pattern>/sso/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Validation Filter</filter-name>
<url-pattern>/sso/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
<url-pattern>/sso/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Assertion Thread Local Filter</filter-name>
<url-pattern>/sso/*</url-pattern>
</filter-mapping>
官⽅⽂档特别说明这4个Filter是必须的
1The correct order of the filters l is necessary: AuthenticationFilter
TicketValidationFilter (whichever one is chosen)
HttpServletRequestWrapperFilter
AssertionThreadLocalFilter
这⾥我要说明⼀下为什么这4个filter是必须要配的。
AuthenticationFilter的作⽤是⽤于拦截SSO登陆请求的,当你提交的request符合SSO登陆规则,CAS client会通过这个filter将登陆请求转向到CAS server的登陆界⾯。因为这是第⼀步,所以它要在最上⾯。
TicketValidationFilter的作⽤是⽤于拦截登陆返回的跳转请求的。当CAS server确认登陆⽤户名密码后,会返回⼀个server ticket,这个ticket会由应⽤服务器上的CAS client再送回CAS server进⾏验证,⽤于防⽌仿冒攻击的。
HttpServletRequestWrapperFilter的⽬的是将CAS server返回的信息封装到Http request⾥⾯,这样客户端就可以⽤
AssertionThreadLocalFilter的作⽤是⽤于前端程序(通常是前端脚本程序)访问,因为这个时候你⽆法通过request来获取信息。
所以如果这4个filter不配置正确,就会报各种错误。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。