java实现简单的单点登录(4)
?效验成功以后,便会显示当前登录的用户的基本信息等等。?这时候再运行第二个桌面Java应用(mailSystem)的时候,就不需要再登录了,直接就显示出来刚才登录的用户。 第三个应用是logout,运行它之后,用户便退出系统。再访问的时候,又需要重新登录了。请读者再制裁执行完logout之后,重新验证一下前两个应用的SSO:先运行第二个应用,再运行第一个,会看到相同的效果。 我们的样例并没有在这里停步,事实上,本样例不仅能够和在几个Java应用之间SSO,还能和浏览器进行SSO,也就是将浏览器也当成是桌面的一部分。这对一些行业有着不小的吸引力。 这时候再打开Mozilla浏览器,访问以前提到的那两个WEB应用,会发现只要桌面应用如果登录过,Web应用就不用再登录了,而且能显示刚才登录的用户的信息。读者可以在几个桌面和Web应用之间进行登录和logout的试验,看看它们之间的SSO。 6.3桌面样例的源码分析 桌面SSO的样例使用了JAAS(要了解JAAS的详细的信息请参考http://java.sun.com/products/jaas)。JAAS是对PAM(Pluggable Authentication Module)的Java实现,来完成?Java应用可插拔的安全认证模块。使用JAAS作为Java应用的安全认证模块有很多好处,最主要的是不需要修改源代码就可以更换认证方式。例如原有的Java应用如果使用JAAS的认证,如果需要应用SSO,只需要修改JAAS的配置文件就行了。现在在流行的J2EE和其他?Java的产品中,用户的身份认证都是通过JAAS来完成的。在样例中,我们就展示了这个功能。请看配置文件login.conf
?
SSOServiceURL=http://wangyu.prc.sun.com:8080/SSOAuth/SSOAuthSSOLoginPage=http://wangyu.prc.sun.com:8080/SSOAuth/login.jspcookiefilepath=C:\\Documents and Settings\\yw137672\\Application Data\\Mozilla\\Profiles\\default\\hog6z1ji.slt\\cookies.txt?SSOServiceURL和SSOLoginPage成员变量指向了在Web-SSO中用过的身份认证模块:SSOAuth,这就说明在桌面系统中我们试图和Web应用共用一个认证服务。而cookiefilepath成员变量则泄露了一个“天机”:我们使用了Mozilla浏览器的cookie文件来保存登录的凭证。换句话说,和Mozilla共用了一个保存登录凭证的机制。之所以用Mozilla是应为它的Cookie文件格式简单,很容易编程访问和修改任意的Cookie值。(我试图解析Internet Explorer的cookie文件但没有成功。)