`
LieZueYang
  • 浏览: 9694 次
  • 性别: Icon_minigender_1
  • 来自: 郴州
社区版块
存档分类
最新评论

CAS增加登录验证码

阅读更多
本来集成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还挺有意思的............)

分享到:
评论

相关推荐

    CAS-4.0.3服务端登录页添加验证码的Demo

    这是我的博文http://blog.csdn.net/jadyer/article/details/46916169中的完整代码

    cas添加验证码功能

    cas添加验证码功能,里面还有一些需要的包,自己可以到网上下载哦

    Apereo CAS5.2.3 自定义登录页,验证码,扩展开发,注册功能

    完整项目在https://download.csdn.net/download/u010588262/10327539 这个资源是新增功能之后的main文件夹 对应博客系列:https://blog.csdn.net/u010588262/article/category/7548325 对应博客这篇:...

    cas-overlay-template-5.3

    CAS(Central Authentication Service)是一种广泛使用的单点登录(Single Sign-On, SSO)框架,它为Web应用程序提供了统一的身份验证服务。"cas-overlay-template-5.3" 是一个基于Spring Boot构建的CAS服务器覆盖...

    SSO CAS Server 二次开发说明文档

    4. **添加验证码校验逻辑**:在认证处理流程中增加验证码验证步骤。如果用户输入的验证码不正确,则登录失败。 5. **自定义异常处理Handler**:编写自定义的异常处理程序,用于记录错误登录次数并在达到阈值时触发...

    CAS 开发综合笔记

    文件"为CAS单点登录服务器增加验证码功能 - waitingmyself的日志 - 网易博客.mht"可能详细记录了这个过程。 3. **RememberMe功能**: RememberMe功能允许用户在一段时间内无需重新登录。CAS支持RememberMe,通过在...

    cas 6.0.0-rc3

    4. **多因素认证(MFA)支持**:CAS支持多种多因素认证方法,如短信验证码、硬件令牌、生物识别等。在6.0.0-RC3中,可能增加了新的MFA提供者或优化了现有提供者的集成。 5. **单点登出(Single Sign-Out, SSO)**:...

    cas_server

    随着时间推移,CAS不断迭代更新,增加了更多功能和改进安全性。 - CAS拥有活跃的社区,提供丰富的文档、示例代码和问题解答,便于开发者学习和使用。 6. 应用场景: - 教育机构:学生和教职员工通过单点登录访问...

    cas4.1.x集成.zip

    CAS(Central Authentication Service)是Java开发的一个开源身份验证框架,主要功能是为各种应用程序提供单一登录(Single Sign-On,简称SSO)服务。在CAS 4.1.x版本中,这个框架进行了许多改进和增强,旨在提高...

    单点登入--CAS3.0

    4. **多因素认证**:考虑增加额外的安全层,如短信验证码或生物识别。 通过了解和实践CAS 3.0,开发者可以创建高效、安全的SSO解决方案,提升企业级应用的用户体验和安全性。源码分析和工具使用是加深理解的关键...

    js+canvas绘制图形验证码.docx

    在实际项目中,你可能还需要增加更多的复杂性,如扭曲文本、添加噪声点、干扰线等,以提高验证码的安全性。同时,为了实现验证码的验证功能,通常还需要将其值与服务器端进行比对,确保用户输入的验证码正确无误。

    SSO 单点登录(java)

    8. **安全性考虑**:SSO提高了用户体验,但也增加了攻击风险。比如,Session劫持和CSRF(跨站请求伪造)攻击。因此,需要确保Token的安全传输(HTTPS)、定期刷新Token、以及添加验证码等反CSRF措施。 9. **部署与...

    js+canvas绘制图形验证码

    验证码的主要目的是为了防止自动化脚本或机器人进行恶意操作,通常需要用户输入由系统生成的一组随机字符。 首先,我们来看一下核心的JavaScript代码。在这个例子中,有两个主要的函数:`rand()` 和 `randStr()`。`...

    【MaxKey单点登录认证系统 v2.4.0 RC】企业级IAM身份管理和身份认证产品+RBAC权限管理.zip

    寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录...

    跨域名和应用程序登陆

    跨域名和跨应用程序登录虽然带来了便利,但也增加了安全风险,如CSRF(Cross-Site Request Forgery)攻击、中间人攻击等。因此,开发者必须采取严格的安全措施,如: 1. 使用HTTPS加密传输,防止数据在传输过程中被...

    基于vue-element-admin的,并且需要配合jeeweb的前后端分离模块一起开发模块

    5. **短信验证**:为了增加安全性,项目集成了短信验证功能。当用户注册或修改重要信息时,系统会发送验证码到用户的手机上,用户输入正确的验证码才能完成操作。 6. **邮件服务**:邮件服务常用于密码找回、系统...

    java开源包1

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包11

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

Global site tag (gtag.js) - Google Analytics