`
onebyte
  • 浏览: 8472 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

sso例子

 
阅读更多
网址
http://my.oschina.net/huangyong/blog/198519?p=2#comments


http://blog.csdn.net/maxgong2005/article/details/557052

http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.html
cas sso单点登录框架应用(一)

  前端时间学习了,cas 的sso 框架,在这里简略记录一下,拉下访客。而且这两天又在修改样式,既郁闷又痛苦,趁这个换换脑子。本篇博客记载的大多都是从网上收集加上自己总结的,并不权威。转载请注明出处。

  首先是下载cas相关的资源,需要的是 cas-server-3.5.2-release.zip 里面包含 cas-server-webapp-3.5.2.war,cas-client-3.2.1-release.zip 里面包含 cas-client-core-3.2.1.jar,另在找一个jar包(casClientNew.jar),版本请随意,我用的是这两个版本,未测试其他版本。环境 jdk1.6,tomcat 6.0。

  介绍我实现的功能,sso单点登录,未使用ssl,需特别说明的是,cas的安全保证很大部分依靠ssl,因此,有条件请实现。cas sso 实现的是用户验证,用户进到某个子系统的权限依然由子系统控制(我是写了一个过滤器实现的)。

  接下来开始介绍步骤,至于cas 原理,网上很多介绍,我不再copy了。http://www.cnblogs.com/yonsin/archive/2009/08/29/1556423.html  http://blog.csdn.net/maxgong2005/article/details/557052 请自己参考查阅。

  第一步是修改cas server 服务端( cas-server-webapp-3.5.2.war),既然是单点登录一定需要验证,需要告知cas server如何验证,我采用的是cas server自己访问数据库我指定的表,验证用户名和密码。密码的加密方式是我自己实现的。我只用到了用户表的用户名和密码两个字段。cas-server 支持添加用户属性(除用户名和密码),支持验证码,等诸多功能,有兴趣请自己研究实现。

  首先,配置数据源,找到WEB-INF下的deployerConfigContext.xml文件,deployerConfigContext.xml是 cas-server的重要配置文件,在里面配置数据源,请配置在第一位:

复制代码
复制代码
<bean id="casDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
        <!--SQL SERVER -->
        <property name="driver" value="自己选择驱动类"></property>
        <property name="driverUrl"
            value="数据库字符串"></property>
        <property name="user" value="用户名" />
        <property name="password" value="密码" />
        <property name="houseKeepingSleepTime" value="相关属性自己设置" />
        <property name="prototypeCount" value="相关属性自己设置" />
        <property name="maximumConnectionCount" value="相关属性自己设置" />
        <property name="minimumConnectionCount" value="相关属性自己设置" />
        <property name="trace" value="true" />
        <property name="verbose" value="true" />
    </bean>
复制代码
复制代码
  然后配置自己实现的加密方式,当然你的加密类需要实现他的接口 org.jasig.cas.authentication.handler.PasswordEncoder:

<bean id="passwordEncoder"
        class="加密方式自己实现"
        autowire="byName">
</bean>
  接下来,找到bean 为 authenticationManager 里面的一个属性 authenticationHandlers,里面list中的一个bean 类指向 HttpBasedServiceCredentialsAuthenticationHandler 中的一个属性:p:requireSecure="false" 设置成false 表示 客户端不启用 ssl。然后是HttpBasedServiceCredentialsAuthenticationHandler的下面有一个 cas 的jdbc实现bean , SearchModeSearchDatabaseAuthenticationHandler 里面添加你的数据源设置和加密方式设置。

复制代码
复制代码
          <bean
                    class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"
                    abstract="false" lazy-init="default" autowire="default"><!-- dependency-check="default" -->
                    <property name="dataSource" ref="casDataSource" />
                    <property name="tableUsers" value="用户表" />
                    <property name="fieldUser" value="用户名" />
                    <property name="fieldPassword" value="密码" />
                    <property name="passwordEncoder" ref="passwordEncoder" />
                </bean>
复制代码
复制代码
  在到WEB-INF下的spring-configuration目录下找到文件ticketGrantingTicketCookieGenerator.xml 设置属性 p:cookieSecure="false" false表示不启用ssl。

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
        p:cookieSecure="false"
        p:cookieMaxAge="-1"
        p:cookieName="CASTGC"
        p:cookiePath="/cas" />
  至此服务端设置完毕,当然还有很多属性没有说,有兴趣请自己研究。

  接下来是客户端的修改:首先添加相应jia包到客户端:cas-client-core-3.2.1.jar,casClientNew.jar,然后是配置过滤器,因为我的系统配置的还有webserverice等,所以cas filter的过滤路径我并没有配置/*

复制代码
复制代码
<!-- cas sso 验证相关 开始 -->
    <!--用于单点退出配置 -->
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>
    <filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </filter>
    <!--用于单点登录配置 -->
    <filter>
        <filter-name>CAS Filter</filter-name>
        <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
        <!--下面两个为验证地址,即cas server端的登录地址和验证地址 -->
        <init-param>
            <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
            <param-value>http://localhost:8088/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
            <param-value>http://localhost:8088/cas/serviceValidate</param-value>
        </init-param>
        <!--本工程的URL被拦截的需要验证的访问地址 -->
        <init-param>
            <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
            <param-value>localhost:8080</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>CAS Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>-->
     <filter-mapping>
        <filter-name>CAS Filter</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CAS Filter</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CAS Filter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>CAS Filter</filter-name>
        <url-pattern>*.js</url-pattern>
    </filter-mapping> 
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

    <!-- cas sso 验证相关 结束-->
复制代码
复制代码
  client获取用户名 ,而且我们假定获取的用户名是可信任的:

String username = (String) request.getSession().getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_USER);
  OK,现在为止你的系统已经可以实现单点登录了,上面的这些基本也是可以从网上随便搜下就能找到的。接下来我讲一下自己的定制。

  

  

  首先是,登录页面修改,cas server的页面设置在 default_views.properties 文件里,请根据需要修改。然后说下系统的sso单点登录,有时候我们根据客户要求会集成多种登录方式,不仅仅是cas sso这个一种,因此需要你重写 edu.yale.its.tp.cas.client.filter.CASFilter,根据url选择性过滤。你重写的filter继承自CASFilter,不需过滤直接filterChain.doFilter(request, response);需要过滤的就调用super.doFilter(httprequest, response, filterChain);

  然后就是关于potal,cas 框架我们一方面是想实现单点登录,一方面也希望给客户做个potal,最初我是计划potal放在casserver里面,但登录的第一次可以获取到用户信息,之后一直获取不到用户信息因此就放到了client端。cas 框架本身提供了代理模式,但按照网上配置未成功,就先自己写了一个验证方式。假如potal放的client端为A,其他为B、C。A从B、C抽取数据,B、C提供好服务类,集成同一接口配置到spring容器中。A使用URLConnection模拟调用B、C的服务时,A提供服务名作为参数传递过去,让B、C从spring容器里面取。一个是建议json传输,然后就是中文可能乱码解决:result = new String(resultJson.getBytes("iso8859-1"),"UTF-8");还有就是 CASFilter过滤时也可能存在乱码问题,请自己设置过滤器设置编码。

分享到:
评论

相关推荐

    保证可以使用的的SSO例子

    网上有很多SSO的讲解,但是没有可以参考的例子代码, CSDN上有人给出了例子代码,http://blog.csdn.net/javachannel/article/details/752437 但是这个代码是有问题的,对于新手来说调试比较困难,我研究了一下,将...

    asp.net SSO单点登录例子

    在这个例子中,我们有三个不同的域:主域a.com以及两个子域app1.a.com和app2.a.com。目标是创建一个统一的登录系统sso.a.com,用户只需在此系统中登录一次,就能无缝地在app1.a.com和app2.a.com之间切换,无需重复...

    sso 单点登录例子

    在提供的压缩包中,我们可以深入研究这两个SSO的例子,理解它们的实现细节。这可能包括了CAS服务器的配置、客户端应用的集成、票据验证逻辑以及如何利用Redis存储和同步登录状态等。通过实际操作,可以更好地掌握...

    sso demo 例子

    这个"SSO Demo 例子"是一个教学资源,旨在帮助初学者理解并实践SSO的实施过程。下面将详细阐述SSO的基本原理、常见协议以及如何通过提供的SSO_CAS_Demo进行学习。 1. **SSO基本原理**: SSO的核心是中央认证服务...

    一个单点登陆的例子 c#写的 包含加密过程

    在这个C#实现的SSO例子中,"Bob"可能代表一个用户对象或者用户数据库,"客户"可能是指使用该SSO系统的客户端应用,"tcp服务器"则可能是实现CAS通信的TCP服务端,负责处理用户验证请求和票据交换。"TGS"即Ticket ...

    用cas实现的单点登录的例子及教程

    本文将通过一个使用CAS(Central Authentication Service)实现的SSO例子,来深入探讨SSO的原理与实践。 **CAS**是耶鲁大学开源的一个身份验证项目,它提供了一个基于Web的SSO解决方案。CAS服务器作为中央认证服务...

    SSO单点登陆学习例子

    学习SSO单点登陆很好的例子,内附源码解释。由网上收集。很值得学习。

    SSO 客户端JAVA接入例子和文档

    SSO(Single Sign-On)是一种身份验证机制,允许用户在一个应用系统中登录后,无需再次认证即可访问其他相互信任的应用系统。在企业级应用中,SSO能够提供更便捷的用户体验,同时也有助于提高安全性。这个压缩包文件...

    SSO单点登录例子,一共3个项目

    这个是javachannel前辈在上面博客上写的关于单点登录的例子,他给出了下载链接,但是现在已经失效,我辛苦找到了,在这里跟大家分享一下。 javachannel大,如果不可以在这里发,请跟我说一声。 一共有3个项目。

    CAS 单点登录 SSO SpringMVC demo 例子 带tomact 非https的,不需要证书。

    在这个例子中,Tomcat已经配置好,可以直接使用,这意味着开发者可以快速启动和测试SSO功能。 为了运行这个示例,你需要按照以下步骤操作: 1. 解压CasDemo压缩包。 2. 将包含的Tomcat服务器部署到你的系统上,或者...

    spring-boot-keycloak-example:Spring Boot(2.1.9.RELEASE)安全性与Keycloak 4.0.0结合使用的示例

    Keycloak是一个开源的身份和访问管理解决方案,它允许开发者轻松地在应用中集成单点登录(SSO)功能,同时提供了用户账户管理、身份验证和授权服务。 首先,我们需要了解Spring Security,这是Spring Boot默认的...

    simple-sso.zip

    SSO,全称为Single Sign-On...总的来说,"simple-sso.zip"中的内容为我们提供了一个简单的SSO实现框架,包括了服务器、客户端和子系统的代码,通过理解和学习这个例子,开发者可以更好地掌握SSO的工作原理和实现方式。

    nginx-sso:基于cookie和ECDSA的nginx的简单SSO系统

    nginx-sso-用于nginx的简单脱机SSO nginx-sso是一个简单的单点登录(SSO)解决方案,可与nginx和nginx auth_request模块一起使用。 就服务提供商而言,它使用... 在我们的例子中, ssologin工具具有必要的ECC私钥,并

    跨域 SSO 原理与技术

    在实际应用中,Google的G Suite就是一个跨域SSO的例子。用户在Google账户(IDP)登录后,可以无缝访问Gmail、Google Drive等其他Google服务(SP)。这是因为Google使用了OpenID Connect和OAuth2.0协议,确保了跨域...

    rrx 单点登录例子

    在"rrx 单点登录例子"中,我们可能涉及的是一个特定的技术实现,rrx可能是某种软件或框架的缩写,用于实现SSO功能。RTX则可能是一个即时通讯工具,它也支持SSO特性,使得用户在登录RTX后可以无缝接入其他系统。 单...

    cas sso学习心得

    1. CAS服务器:在这个例子中,我们使用的是cas-server-3.5.1版本。 2. CAS客户端:对应的是cas-client-3.2.1版本,同样可以在官方网址http://www.jasig.org下载。 **服务端配置** 对于CAS服务器,配置主要集中在...

    【ASP.NET编程知识】浅谈谁都能看懂的单点登录(SSO)实现方式(附源码).docx

    虽然这个例子中的代码简洁明了,但实际的生产环境中,SSO系统可能需要考虑更多的安全性和扩展性问题,如Token的安全传输、防止CSRF攻击、会话管理等。此外,还可以考虑使用像OAuth2或OpenID Connect这样的标准协议来...

    转载CAS_SSO单点登录实例详细步骤

    【CAS_SSO单点登录实例详细步骤】 CAS(Central Authentication Service)是一种开源的单点登录(Single Sign-On,简称SSO)框架,它允许用户通过一个认证入口访问多个应用系统,而无需多次登录。以下是对CAS_SSO单...

Global site tag (gtag.js) - Google Analytics