公司项目要用到单点登录,根据linliangyi2007的CAS学习笔记初步掌握了CAS的使用,现在碰到一个问题就是我需要在CAS登录界面使用验证码,目前页面显示验证码和表单提交的时候获取用户输入的验证码都没有问题,但就是无法取到在Session中保存的验证码,请问该怎么处理?
[b]问题补充:[/b]
问题可能描述得不清楚,这里补充一下:
假设应用服务器是A,CAS在B上,客户端是C
当我用C去访问A时,转向到B去做登录,这时B转向login页面,要求用户输入账号和密码,由于项目要求,登录页面必须提供验证码功能,我的想法是这样的:
1、修改cas_server_webapp,添加一个产生验证码的servlet。
2、修改登录页面的表单,显示验证码和提供验证码输入框。
3、新建一个类,继承Credentials接口,与UsernamePasswordCredentials类似,增加了一个验证码的字段
4、新增一个AuthenticationHandler,与SimpleTestUsernamePasswordAuthenticationHandler类似,在验证用户名和密码前,先验证验证码是否正确。
5、修改相关配置文件,使用新的Credentials和AuthenticationHandler。
所以在整个过程中,其实是与A无关的,这里面的Session,就是B的Session,用户在访问登录界面的时候,产生验证码的servlet会把验证码保存在B的session里面,但我不知道怎么在AuthenticationHandler能访问到session,以便把之前保存的验证码与用户输入的做比较。
[b]问题补充:[/b]
还没有找到如何在AuthenticationHandler中获取session的办法,因此也就没有写一个filter来解决验证码验证的问题,目前我的解决做法是重写了org.jasig.cas.web.flow.AuthenticationViaFormAction类,在submit方法中对验证码做了处理,感觉是恶心了一点,不过暂时能达到我的目的了.
的确最好的做法是加多一层filter来验证验证码.