CAS之自定义登录遇到的问题总结
在改造 CAS 单点登录之自定义登录的过程中遇到了很多的问题,现在把这些问题写下来,也是自己对于单点登录的一些总结。
-
将 CAS 集成进老项目
首先碰到的一个问题就是如何将老项目原有的登录逻辑换成 CAS 的,因为 CAS 分为服务端和客户端,我们的项目就是一个客户端,但是因为是一个老项目,所以如果贸然改,会碰到很多意想不到的 Bug。原有项目是根据 Spring Security 进行用户权限管理,我在网上查了很多关于 Sring Seurity 与 CAS 如何集成在一起的资料,也包括 CAS 官方给出的文档。
在集成的过程中碰到了一系列的问题,项目总是不能正常跑起来,修改了很多配置文件,中途需求也改了,不能使用 CAS 提供的登录页面,换成了我们基础项目的登录页面,总之这个方案没有解决问题,只好换一个解决方案了。
-
改造 CAS 之自定义登录
上一个方案不行,只好换一个思路了,也在网上查到了很多资料,其中有两篇的参考价值比较大。在这里贴出来,希望能够帮助到大家。http://lsz1023-126-com.iteye.com/blog/2098973
http://denger.iteye.com/blog/809170具体的改造过程参考上一篇的文章,这里主要讲一下配置过程中遇到的问题。其实遇到的最大的问题是配置好之后,CAS 认证服务器没有成功跳转到项目首页,又跳转到了项目登录页。后来发现是在 login.jsp 页面
form
表单的<input type="hidden" name="service" id= "service"/>
中的service
参数每次都为空值,从而导致不能正常跳转。在集成其他项目上时,单点登录的一个比较成功的实现,就是用户在登录状态下,再次访问项目的默认地址,这时,系统应该直接跳过登录页,直接打开首页,天猫,微博等的单点登录都是这样,这也是一个判断单点登录成不成功的一个体现。
在配置其他项目时,我们只需在 web.xml 中配置项目的登录地址,具体到 login.jsp ,例如 http://127.0.0.1:8080/xxx/login.jsp 因为有些项目的默认地址是配置在
welcome-file-list
中,应该在里面加一个欢迎页index.jsp
在欢迎页里加上windown.top.location.href="<%=request.getContextPath()/xxx/login.do%>"
后面的路径具体写后台处理登录的映射方法的地址,这样每次访问项目地址,就会在后面加上service=http://xxx.xxx.x.xx:xxxx/xxx/login.do
这样 CAS 在认证成功后就会根据后面的 service 参数地址,跳转到相应的页面。当已经在登录状态下,在去访问项目地址时,就不会在到项目的登录页,而是直接跳转到项目首页,省去了登录的过程。
我已经将改造过的 CAS 放到了 GitHub 上了,有兴趣的小伙伴可以去关注一下,为碰到工作需要 CAS 认证的提供另一种解决方式,希望能够帮助到大家。