CAS客户端配置单点登录

本文源码下载:/** * @see CAS客户端配置 * @see ———————————————————————————————————————— * @see 这里用的是cas-client-core-3.4.0.jar(这是2015-07-21发布的) * @see 下载地址 * @see 另外为了使客户端在HTTP协议下单点成功,可以修改以下两处配置使其不开启HTTPS验证 * @see 1.\WEB-INF\deployerConfigContext.xml * @see <bean class="org.jasig…support.HttpBasedServiceCredentialsAuthenticationHandler">添加p:requireSecure="false" * @see 2.\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml和\WEB-INF\spring-configuration\warnCookieGenerator.xml * @see p:cookieSecure="true"改为p:cookieSecure="false" * @see 下面介绍两种配置方法,一种是纯web.xml配置,一种是借助Spring来配置,相关的官方文档如下所示 * @see https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml * @see https://wiki.jasig.org/display/CASC/Configuring+the+JA-SIG+CAS+Client+for+Java+using+Spring * @see ———————————————————————————————————————— * @see 纯web.xml * @see web.xml中需配置四个顺序固定的Filter,而且出于认证考虑,最好配置在其他Filter之前,它们的先后顺序如下 * @see AuthenticationFilter * @see TicketValidationFilter(或其它AbstractTicketValidationFilter实现,比如Cas20ProxyReceivingTicketValidationFilter) * @see HttpServletRequestWrapperFilter * @see AssertionThreadLocalFilter * @see 另外各个Filter的<init-param>优先级都比<context-param>要高,通常<context-param>用来配置公用的参数 * @see 1.AuthenticationFilter * @see 用来拦截请求,判断是否需要CASServer认证,需要则跳转到CASServer登录页,否则放行请求 * @see 有两个必须参数,一个是指定CASServer登录地址的casServerLoginUrl,另一个是指定认证成功后跳转地址的serverName或service * @see service和serverName设置一个即可,二者都设置时service的优先级更高,即会以service为准 * @see service指的是一个确切的URL,而serverName是用来指定客户端的主机名的,格式为{protocol}:{hostName}:{port} * @see 指定serverName时,该Filter会把它附加上当前请求的URI及对应的查询参数来构造一个确切的URL作为认证成功后的跳转地址 * @see 比如serverName为"",当前请求的URI为"/oa",查询参数为"aa=bb",则认证成功后跳转地址为?aa=bb * @see casServerLoginUrl–去哪登录,serverName–我是谁 * @see 2.TicketValidationFilter * @see 请求通过AuthenticationFilter认证后,若请求中携带了ticket参数,则会由该类Filter对携带的ticket进行校验 * @see 验证ticket的时候,要访问CAS服务的/serviceValidate接口,使用的url就是${casServerUrlPrefix}/serviceValidate * @see 所以它也有两个参数是必须指定的,casServerUrlPrefix(CASServer对应URL地址的前缀)和serverName或service * @see 实际上,TicketValidationFilter只是对验证ticket的这一类Filter的统称,其并不对应CASClient中的具体类型 * @see CASClient中有多种验证ticket的Filter,都继承自AbstractTicketValidationFilter * @see 常见的有Cas10TicketValidationFilter/Cas20ProxyReceivingTicketValidationFilter/Saml11TicketValidationFilter * @see 它们的验证逻辑都是一致的,都有AbstractTicketValidationFilter实现,只是使用的TicketValidator不一样而已 * @see 3.HttpServletRequestWrapperFilter * @see 用于封装每个请求的HttpServletRequest为其内部定义的CasHttpServletRequestWrapper * @see 它会将保存在Session或request中的Assertion对象重写HttpServletRequest的getUserPrincipal()、getRemoteUser()、isUserInRole() * @see 这样在我们的应用中就可以非常方便的从HttpServletRequest中获取到用户的相关信息 * @see 4.AssertionThreadLocalFilter * @see 为了方便用户在应用的其它地方获取Assertion对象,其会将当前的Assertion对象存放到当前的线程变量中 * @see 以后用户在程序的任何地方都可以从线程变量中获取当前的Assertion,而无需从Session或request中解析 * @see 该线程变量是由AssertionHolder持有的,我们在获取当前的Assertion时也只需Assertion assertion = AssertionHolder.getAssertion() * @see ———————————————————————————————————————— * @see 借助Spring * @see 与上述web.xml配置四个Filter方式不同的是,可以使用Spring的四个DelegatingFilterProxy来代理需要配置的四个Filter * @see 此时这四个Filter就应该配置为Spring的Bean对象,并且web.xml中的<filter-name>就应该对应SpringBean名称 * @see 但是SingleSignOutFilter/HttpServletRequestWrapperFilter/AssertionThreadLocalFilter等Filter不含配置参数 * @see 所以实际上只需要配置AuthenticationFilter和Cas20ProxyReceivingTicketValidationFilter两个Filter交由Spring代理就可以了 * @see ———————————————————————————————————————— * @see 注意 * @see 1.CAS1.0提供的接口有/validate,,CAS2.0提供的接口有/serviceValidate,/proxyValidate,/proxy * @see 2.四个Filter太多了,有时间的话考虑参考org.springframework.web.filter.CompositeFilter写一个Filter来实现 * @see 3.web.xml的好处是可以配置匿名访问的资源,配置参数参考AuthenticationFilter中的ignoreUrlPatternMatcherStrategyClass * @see 起码cas-client-core-3.4.0.jar中的Spring配置还不支持ignorePattern(该参数默认正则验证,此外还有contains和equals验证) * @see 4.javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching casserver found * @see 这是由于创建证书的域名和应用中配置的CAS服务域名不一致导致出错(说白了就是指客户端导入的CRT证书与CAS服务端的域名不同) * @see ———————————————————————————————————————— * @create 2015-7-26 下午1:00:14 * @author 玄玉<> */一个背包,几本书,所有喜欢的歌,

CAS客户端配置单点登录

相关文章:

你感兴趣的文章:

标签云: