首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 互联网 >

CAS 单点登录课程

2013-03-28 
CAS 单点登录教程用keytool生成证书具体的输入项图片中都有说明,有一点我要解释一下;在输入完密码后提示输

CAS 单点登录教程

用keytool生成证书


具体的输入项图片中都有说明,有一点我要解释一下;在输入完密码后提示输入域名是我输入的是sso.wsria.com,其实这个域名是不存在的,但是我为了演示所以虚拟了这个域名,技巧在于修改C:\Windows\System32\drivers\etc\hosts,添加内容如下:

127.0.0.1 sso.wsria.com

?

这样在访问sso.wsria.com的时候其实是访问的127.0.0.1也就是本机

?

严重提醒:提示输入域名的时候不能输入IP地址

?

三、导出证书

?

命令:D:\keys>keytool -export -file d:/keys/wsria.crt -alias wsria -keystore d:/keys/wsriakey

?

特别提示:如果提示

keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect

那么请输入密码:changeit

?

来点颜色:

?

CAS 单点登录课程

使用keytool导出证书


至此导出证书完成,可以分发给应用的JDK使用了,接下来讲解客户端的JVM怎么导入证书

四、为客户端的JVM导入证书

?

命令:keytool -import -keystore D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security\cacerts -file D:/keys/wsria.crt -alias wsria

?

来点颜色瞧瞧:

?

CAS 单点登录课程

为客户端JVM导入证书


特别说明:D:\tools\jdk\1.6\jdk1.6.0_20\jre\lib\security — 是jre的目录;密码还是刚刚输入的密码。
至此证书的创建、导出、导入到客户端JVM都已完成,下面开始使用证书到Web服务器中,本教程使用tomcat。

五、应用证书到Web服务器-Tomcat

?

说是应用起始做的事情就是启用Web服务器(Tomcat)的SSL,也就是HTTPS加密协议,为什么加密我就不用啰嗦了吧……
准备好一个干净的tomcat,本教程使用的apache-tomcat-6.0.29
打开tomcat目录的conf/server.xml文件,开启83和87行的注释代码,并设置keystoreFile、keystorePass修改结果如下:

?

?

?

[html]view plaincopyprint?
  1. <</span>Connectorport="8443"protocol="HTTP/1.1"SSLEnabled="true"
  2. maxThreads="150"scheme="https"secure="true"
  3. clientAuth="false"sslProtocol="TLS"
  4. keystoreFile="D:/keys/wsriakey"
  5. keystorePass="wsria.com"
  6. />



?

?

参数说明:

?

    keystoreFile:在第一步创建的key存放位置keystorePass:创建证书时的密码

    ?

    好了,到此Tomcat的SSL启用完成,现在你可以启动tomcat试一下了,例如本教程输入地址:https://sso.wsria.com:8443/
    打开的是:

    ?

    CAS 单点登录课程

    浏览器提示证书错误


    好的,那么我们点击“继续浏览此网站(不推荐)。 ”,现在进入Tomcat目录了吧,如果是那么你又向成功迈进了一步。
    OK,接下来要配置CAS服务器了。

    六、CAS服务器初体验

    ?

      CAS服务端下载:http://www.jasig.org/cas/download下载完成后将cas-server-3.4.3.1.zip解压,解压cas-server-3.4.3/modules/cas-server-webapp-3.4.3.1.war,改名为cas,然后复制cas目录到你的tomcat/webapp目录下现在可以访问CAS应用了,当然要使用HTTPS加密协议访问,
      例如本教程地址:https://sso.wsria.com:8443/cas/login ,现在打开了CAS服务器的页面输入admin/admin点击登录(CAS默认的验证规则只要用户名和密码相同就通过)所以如果你看到下面的这张图片你就成功了

    ?

    CAS 单点登录课程

    CAS登录成功

    2011-11-05更新说明:对于3.4.10版本来官方没有直接提供war包而仅仅提供了源码,因为官方使用maven构建项目,所以需要读者自己构建打包,其实也比较简单,请参考文章最后面的构建说明。

    使用Maven构建:

    使用cmd或者shell进入cas-server-3.4.10目录,运行:mvn package -pl cas-server-webapp,cas-server-support-jdbc

    意思是只需要构建cas-server-webapp和cas-server-support-jdbc,如果需要其他的请根据文件夹名称设置或者构建全部模块,打包全部模块命令:mvn package 即可。打包过程中会从网络下载需要的jar包,请耐心等待;如果在~/.m2/settings.xml中定义了mirror代理*,那么请把*随便修改一个字符,否则下载jar包会失败!

    打包完成后就可以从cas-server-webapp/target/cas.war复制到你的tomcat/webapp中;或者直接复制cas-server-webapp/target/cas-server-webapp-3.4.10目录到tomcat/webapp目录下,其他步骤和上面一样

    七、CAS服务器深入配置

    上面的初体验仅仅是简单的身份验证,实际应用中肯定是要读取数据库的数据,下面我们来进一步配置CAS服务器怎么读取数据库的信息进行身份验证。
    首先打开tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml文件,配置的地方如下:

      找到第92行处,注释掉:SimpleTestUsernamePasswordAuthenticationHandler这个验证Handler,这个是比较简单的,只是判断用户名和密码相同即可通过,这个肯定不能在实际应用中使用,弃用!注释掉92行后在下面添加下面的代码:
      ?在文件的末尾之前加入如下代码:?
      <!-- ======================== 单点登录开始 ======================== -->  <!-- 用于单点退出该过滤器用于实现单点登出功能可选配置--><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-mapping><filter-name>CAS Single Sign Out Filter</filter-name><url-pattern>/*</url-pattern>  <!--这里必须是/*,因为这里是由SSO服务器向每个客户端发送请求,这里负责拦截--></filter-mapping><!-- 登录 --><filter><filter-name>CASFilter</filter-name><filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class><init-param><param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name><param-value>https://sso.wsria.com:8443/cas/login</param-value></init-param><init-param><param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name><param-value>https://sso.wsria.com:8443/cas/proxyValidate</param-value></init-param><init-param><param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name><param-value>sso.fashion.com:8089</param-value>(Fashion项目如此配置,如果是HuoDong配置sso.zy.com:8089</init-param></filter><filter-mapping><filter-name>CASFilter</filter-name><url-pattern>/index.jsp</url-pattern></filter-mapping>
      ?利用AutoSetUserAdapterFilter自动根据CAS信息设置Session的用户信息
      先看一下这个Filter的源码:
      好的,如果你是老程序员应该很快就清楚Filter的目的,如果不太懂我再讲解一下;
      主要是通过CAS的_const_cas_assertion_获取从CAS服务器登陆的用户名,然后再根据系统内部的用户工具(UserUtil.java)来判断是否已经登录过,如果没有登录根据登录名从数据库查询用户信息,最后使用设置把用户信息设置到当前session中。
      这样就把用户信息保存到了Sessino中,我们就可以通过UserUtil工具来获取当前登录的用户了,我在实例项目中也加入了此功能演示,请看代码:main.jsp的第44行处补充一下:如果是为一个老项目添加单点登录功能,那么基本不需要其他的修改,设置好上面的filter即可;当然最好获取用户信息的地方都调用一个工具类,统一管理不容易出错。

      九、美化CAS服务器界面

      CAS服务端(cas-server)的界面只能在测试的时候用一下,真正系统上线肯定需要定制开发自己的页面,就想网易和CSDN的统一认证平台一样,所有子系统的认证都通过此平台来转接,大家可以根据他们的页面自己定制出适合所属应用或者公司的界面;简单介绍一下吧,复制cas\WEB-INF\view\jsp\default\ui的一些JSP文件,每一个文件的用途文件名已经区分了,自己修改了替换一下就可以了。
      例如:
      登录界面:casLoginView.jsp
      登录成功:casGenericSuccess.jsp

      登出界面:casLogoutView.jsp

      十、关于登出问题

      界面的注销连接到CAS的logout地址,如<a href="https://sso.wsria.com:8443/cas/logout?service=http://sso.zy.com:8088/HuoDong/MyHtml.html">退出</a>

      ?

      ?

      ?

      备注:如果直接访问CAS的logout话,会出现注销成功页面,其实大部分情况下这个页面是没有必要的,更多的需求可能是退出后显示登录页面,并且登录成功后还是会进入到之前的业务系统,那么可以修改cas-servlet.xml文件,在"logoutController"的bean配置中增加属性“followServiceRedirects”,设置为“true”,然后在业务系统的注销连接中加入"service参数",值为业务系统的绝对URL,这样就OK了,如你的业务系统URL为:http://localhost:8080/casClient,那么注销URL就为:http://localhost:8080/cas/logout?service=http://localhost:8080/casClient

    ?????? ps:如果出现不关游览器的话扔可以访问应用,说明你的CAS服务器将cookie设置成了浏览器有效

    ??????????? 修改方法为

    ??????????? 默认配置cookie有效期为-1
    ??????????? 配置文件为:WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

    ?

热点排行