cas 4.0 单点登陆

来源:互联网 发布:zookeeper linux 下载 编辑:程序博客网 时间:2024/05/18 14:14

有关cas 单点登陆的原理请看 :http://blog.csdn.net/andychen314/article/details/41173637

在这里,主要是和大家分享一下修改或添加用户验证,以及TGT、ST、PGT、PT的内容改写,以及4.0中关于代理模式的注意事项。

CAS取消HTTPS

CAS 取消HTTPS需要改两处配置:

1、修改第一处:

 /WEB-INF/deployerConfigContext.xml

<span style="font-family:Microsoft YaHei;font-size:18px;"><bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"p:httpClient-ref="httpClient"/></span>

 增加参数p:requireSecure="false",是否需要安全验证,即HTTPS,false为不采用。修改后为:

<span style="font-family:Microsoft YaHei;font-size:18px;"><bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" p:requireSecure="false"/></span>

2、修改第二处:

/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

<span style="font-family:Microsoft YaHei;font-size:18px;"><bean id="ticketGrantingTicketCookieGenerator"class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure="true"p:cookieMaxAge="-1" p:cookieName="CASTGC" p:cookiePath="/cas"/></span>


自定义用户验证配置

在自定义Handler之前,首先要先定义用户信息类,用户信息类需要继承于 UsernamePasswordCredential类,在父类中已定义username 和 password,新派生类只增加需要属性即可。如下图:



再将自定义用户信息类,注册到/WEB-INF/login-webflow.xml中。如下图:       



然后将页面中用户信息类与页面作映射关系,然后将映射属性绑定。

 

用户验证

自定义Handler:新Handler必须继承于AuthenticationHandler。


将其配置到spring( /WEB-INF/deployerConfigContext.xml)中,并注入到PolicyBasedAuthenticationManager中, PolicyBasedAuthenticationManager中提供了Map注入和List注入两个构造函数。


下面配置文件的原配置文件为Map形式的注入:


修改为List形式注入。其中PolicyBasedAuthenticationManager中有此两个构造函数。


用户验证配置更改完成。

基础模式配置

首先,下面是完整的配置代码,然后进行分别讲解。

<!-- ======================== 单点登录开始 ======================== --><!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->    <listener>   <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>    </listener>    <!-- CAS Server 通知 CAS Client,删除session,注销登录信息  -->    <filter>        <filter-name>CAS Single Sign Out Filter</filter-name>        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>    </filter>    <!-- 该过滤器负责用户的认证工作,必须启用它 -->    <filter>        <filter-name>CASFilter</filter-name>        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>        <init-param>            <!--这里是 cas 服务地址-->            <param-name>casServerLoginUrl</param-name>            <param-value>http://localhost:8000</param-value>        </init-param>        <init-param>            <!--这里的server是服务端的IP-->            <param-name>serverName</param-name>            <param-value>http://localhost:8080/</param-value>        </init-param>    </filter>    <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->    <filter>        <filter-name>CAS Validation Filter</filter-name>        <filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>        <init-param>            <!--这里是 cas 服务地址-->            <param-name>casServerUrlPrefix</param-name>            <param-value>http://localhost:8000</param-value>        </init-param>        <init-param>            <!--这里的server是服务端的IP-->            <param-name>serverName</param-name>            <param-value>http://localhost:8080</param-value>        </init-param>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>CAS Single Sign Out Filter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>CASFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>CAS Validation Filter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!--该过滤器负责实现HttpServletRequest请求的包裹,        比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。-->    <filter>        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>        <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!--该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。        比如AssertionHolder.getAssertion().getPrincipal().getName()。-->    <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 Assertion Thread Local Filter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!-- 自动根据单点登录的结果设置本系统的用户信息-->    <filter>        <display-name>AutoSetUserAdapterFilter</display-name>        <filter-name>AutoSetUserAdapterFilter</filter-name>        <filter-class>com.springapp.mvc.AutoSetUserAdapterFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>AutoSetUserAdapterFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping><!-- ======================== 单点登录结束 ======================== -->

1、如果你需要单点退出功能(可选),那么首先要配置单点退出功能。

配置代码如下:


2、用户认证过滤器(必须配置)。配置代码如下:


3、Ticket的校验过滤器(必须配置)。配置代码如下:


4、filter-mapping的顺序,单点退出过滤必须放在最前面:


5、其它可选配置,其中最后一个是自定义过滤,自定义过滤中,可以获取用户名,从面载入用户信息:


 

代理模式配置

代理模式的配置是在基础模式之前增加了一个过滤,但配置方法一定注意。

在基础模式的“Ticket的校验过滤器”中增加初始参数,代码如下:



注意:其中新增加的参数值的URL中的后缀需要与被代理的Ticket过滤器中的proxyCallback的value操持一致,在登陆应用的时候,Cas Server会向被代理服务进行验证Url的正确性,如果不正确,则登陆不成功。

被代理应用配置

被代理应用服务的配置与基础模式的配置基本一致,现将不同之处进行说明:

1、被代理的应用服务配置主要是在“Ticket的校验过滤器”增加如下代码:


2、filter-mapping的顺序较基础模式中增加了代理的如下:


注意:如果有单点退出,单点退出放在第一位,其实是代理filter-mapping如果没有单点退出监听,代理监听放在第一位。


如果有问题,或写的不合适地方,请告知,谢谢~






0 0
原创粉丝点击