本来集成CAS的时候没想增加验证码的问题,这几天发部测试版本的时候,需求人员跑过来说要加个图片验证码的,当时心里确实没底,但是没说不行,然后就开始搜资料,搜了一会也没搜出什么相关的东西,加上google老报错,没办法! 还是得把源码拿出来看了,还好之前集成CAS的时候对它的目录结构和配置相关的东西了解一点,然后花了点时间看了一下login-webflow.xml的配置,大概知道怎么回事了..........
CAS版本:cas-server-3.4.11,cas-client-3.2.1
1、当然是在登录页面(casLoginView.jsp)增加验证码的输入框(这里我命名为:vcode)。
2、增加vcode输入框后,那相应的,在接收表单的java bean里面也要加上vcode属性,CAS接收和验证登录表单的java bean是UsernamePasswordCredentials,这里我是增加了一个自己的UsernamePasswordVCodeCredentials的类,当然这里要继承UsernamePasswordCredentials类;
public class UsernamePasswordVCodeCredentials extends UsernamePasswordCredentials {
private static final long serialVersionUID = 1L;
@NotNull
@Size(min=1,message = "required.vcode")/*这里需要到相应的属性文件里面增加描述*/
private String vcode;
public String getVcode() {
return vcode;
}
public void setVcode(String vcode) {
this.vcode = vcode;
}
}
更改login-webflow.xml配置
将:
<var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" />>
换成
<var name="credentials" class="net.bean.UsernamePasswordVCodeCredentials" />
然后需要增加对vcode的校验方法了,这里我也是增加一个类,就叫MyAuthenticationViaFormAction
public class MyAuthenticationViaFormAction extends AuthenticationViaFormAction {
private final String ERROR="error";
private final String SUCCESS="success";
public final String validatorCode(final RequestContext context, final Credentials credentials, final MessageContext messageContext) throws Exception {
String vcode=(String)WebUtils.getHttpServletRequest(context).getSession().getAttribute("vcode");
UsernamePasswordVCodeCredentials upv=(UsernamePasswordVCodeCredentials)credentials;
if(StringUtils.isBlank(upv.getVcode()) || StringUtils.isBlank(vcode)) return ERROR;
if(upv.getVcode().equals(vcode)){
return SUCCESS;
}
MessageBuilder msgBuilder=new MessageBuilder();
msgBuilder.defaultText("验证码有误!");
messageContext.addMessage(msgBuilder.error().build());
return ERROR;
}
}
那加了校验类之后,当然配置也得改了,在cas-servlet.xml里面找到
<bean id="authenticationViaFormAction" class="org.jasig.cas.web.flow.AuthenticationViaFormAction"
p:centralAuthenticationService-ref="centralAuthenticationService"
p:warnCookieGenerator-ref="warnCookieGenerator"/>
改成
<bean id="authenticationViaFormAction" class="net.validator.MyAuthenticationViaFormAction"
p:centralAuthenticationService-ref="centralAuthenticationService"
p:warnCookieGenerator-ref="warnCookieGenerator" />
然后在login-webflow.xml里面找到id="viewLoginForm"这个位置,将这个view-state换成;
<view-state id="viewLoginForm" view="casLoginView" model="credentials">
<binder>
<binding property="username" />
<binding property="password" />
<binding property="vcode" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credentials'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="validatorCode">
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />
</transition>
</view-state>
<action-state id="validatorCode">
<evaluate expression="authenticationViaFormAction.validatorCode(flowRequestContext, flowScope.credentials, messageContext)" />
<transition on="error" to="generateLoginTicket" />
<transition on="success" to="realSubmit" />
</action-state>
...........
到这里就配置完成了(发现spring webflow还挺有意思的............)
分享到:
相关推荐
这是我的博文http://blog.csdn.net/jadyer/article/details/46916169中的完整代码
cas添加验证码功能,里面还有一些需要的包,自己可以到网上下载哦
完整项目在https://download.csdn.net/download/u010588262/10327539 这个资源是新增功能之后的main文件夹 对应博客系列:https://blog.csdn.net/u010588262/article/category/7548325 对应博客这篇:...
CAS(Central Authentication Service)是一种广泛使用的单点登录(Single Sign-On, SSO)框架,它为Web应用程序提供了统一的身份验证服务。"cas-overlay-template-5.3" 是一个基于Spring Boot构建的CAS服务器覆盖...
4. **添加验证码校验逻辑**:在认证处理流程中增加验证码验证步骤。如果用户输入的验证码不正确,则登录失败。 5. **自定义异常处理Handler**:编写自定义的异常处理程序,用于记录错误登录次数并在达到阈值时触发...
文件"为CAS单点登录服务器增加验证码功能 - waitingmyself的日志 - 网易博客.mht"可能详细记录了这个过程。 3. **RememberMe功能**: RememberMe功能允许用户在一段时间内无需重新登录。CAS支持RememberMe,通过在...
4. **多因素认证(MFA)支持**:CAS支持多种多因素认证方法,如短信验证码、硬件令牌、生物识别等。在6.0.0-RC3中,可能增加了新的MFA提供者或优化了现有提供者的集成。 5. **单点登出(Single Sign-Out, SSO)**:...
随着时间推移,CAS不断迭代更新,增加了更多功能和改进安全性。 - CAS拥有活跃的社区,提供丰富的文档、示例代码和问题解答,便于开发者学习和使用。 6. 应用场景: - 教育机构:学生和教职员工通过单点登录访问...
CAS(Central Authentication Service)是Java开发的一个开源身份验证框架,主要功能是为各种应用程序提供单一登录(Single Sign-On,简称SSO)服务。在CAS 4.1.x版本中,这个框架进行了许多改进和增强,旨在提高...
4. **多因素认证**:考虑增加额外的安全层,如短信验证码或生物识别。 通过了解和实践CAS 3.0,开发者可以创建高效、安全的SSO解决方案,提升企业级应用的用户体验和安全性。源码分析和工具使用是加深理解的关键...
在实际项目中,你可能还需要增加更多的复杂性,如扭曲文本、添加噪声点、干扰线等,以提高验证码的安全性。同时,为了实现验证码的验证功能,通常还需要将其值与服务器端进行比对,确保用户输入的验证码正确无误。
8. **安全性考虑**:SSO提高了用户体验,但也增加了攻击风险。比如,Session劫持和CSRF(跨站请求伪造)攻击。因此,需要确保Token的安全传输(HTTPS)、定期刷新Token、以及添加验证码等反CSRF措施。 9. **部署与...
验证码的主要目的是为了防止自动化脚本或机器人进行恶意操作,通常需要用户输入由系统生成的一组随机字符。 首先,我们来看一下核心的JavaScript代码。在这个例子中,有两个主要的函数:`rand()` 和 `randStr()`。`...
寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录...
跨域名和跨应用程序登录虽然带来了便利,但也增加了安全风险,如CSRF(Cross-Site Request Forgery)攻击、中间人攻击等。因此,开发者必须采取严格的安全措施,如: 1. 使用HTTPS加密传输,防止数据在传输过程中被...
5. **短信验证**:为了增加安全性,项目集成了短信验证功能。当用户注册或修改重要信息时,系统会发送验证码到用户的手机上,用户输入正确的验证码才能完成操作。 6. **邮件服务**:邮件服务常用于密码找回、系统...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...
JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...