AllenXiao 2008-12-03 18: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 22:10
    关注

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

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

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题