AllenXiao 2008-12-03 10:12
浏览 284
已采纳

请教怎么在CAS中添加验证码功能

公司项目要用到单点登录,根据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来验证验证码.

  • 写回答

2条回答 默认 最新

  • iteye_10167 2008-12-04 14:10
    关注

    我理解错了,不过如果是我,宁愿再另外写一个Filter与CASFilter一起工作,专门检测验证码。也或者在validateUrl对应的Servlet去验证。没有必要重新写Credentials/AuthenticationHandler

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥30 silcavo仿真,30分钟,只需要代码
  • ¥15 FastReport 怎么实现打印后马上关闭打印预览窗口
  • ¥15 利用3支股票数据估计其均值和方差的95%置信区间。
  • ¥15 微信小程序运行一项功能时,弹出未知错误弹框,检查代码没有问题
  • ¥15 ATAC测序生成self-pseudo replicates之前是否要进行去线粒体reads
  • ¥15 python模糊字匹配函数问题
  • ¥20 谁刷目标页面的uv记录器上数据,数据只记录跳转的数值
  • ¥30 数据库软件的安装方法
  • ¥15 一道以太网数据传输题
  • ¥15 python 下载群辉文件