在部署cas登录过程中,可能会用到验证码功能,这里简要介绍一下加入验证码的过程.
1. 首先,我用的cas版本是3.4.6,验证码采用的是CAPTCHA,所需jar包可以google搜索,部署好cas后.在web-info目录下找到login-webflow.xml,打开,找到如下代码:
<view-state id="viewLoginForm" view="casLoginView" model="credentials">
<var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" />
<binder>
<binding property="username" />
<binding property="password" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credentials'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="realSubmit">
<set name="flowScope.credentials" value="credentials" />
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />
</transition>
</view-state>
此段代码的功能是绑定cas登录过程中的用户名和密码,再次我们修改如下:
<view-state id="viewLoginForm" view="casLoginView" model="credentials">
<var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" />
<binder>
<binding property="username" />
<binding property="password" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credentials'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="yzmSubmit">
<set name="flowScope.credentials" value="credentials" />
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />
</transition>
</view-state>
也就是说,只需要修改realSubmit为yzmSubmit即可.然后加入如下配置:
<!--fan add start-->
<action-state id="yzmSubmit">
<evaluate expression="yzmViaFormAction.submit(flowRequestContext)" />
<transition on="success" to="realSubmit" />
<transition on="error" to="viewLoginForm" />
</action-state>
<!--fan add end-->
此段配置是自定义的验证码验证器,用来验证你提交的验证码的正确性.
2.在web-info下找到cas-servlet.xml,打开后,加入
<!--fan add start-->
<bean id="yzmViaFormAction" class="com.ivan.zhang.servlet.YzmAction"
/>
<!--fan add end-->此配置是注册自定义的验证码
3.编写如下类:
package com.ivan.zhang.servlet;
import com.ivan.zhang.CaptchaServiceSingleton;
import com.octo.captcha.service.image.ImageCaptchaService;
import java.io.PrintStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.jasig.cas.web.support.WebUtils;
import org.springframework.webflow.core.collection.ParameterMap;
import org.springframework.webflow.execution.RequestContext;
public class YzmAction
{
public final String submit(RequestContext context)
throws Exception
{
Boolean flag = Boolean.valueOf(false);
System.out.println("YzmAction is submiting....................");
String yzm = context.getRequestParameters().get("yzm");
String captchaId = WebUtils.getHttpServletRequest(context).getSession().getId();
flag = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,
yzm);
if (flag.booleanValue()) {
return "success";
}
return "error";
}
}
其中,flag = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,
yzm);
此句话是为了验证提交的验证码和先前生成的验证码的正确性,以此作为验证结果跳转的依据.CaptchaServiceSingleton此类是自定义类,稍后会附加完整的类供下载调试.
4.打开web-info/view/jsp/default/ui/casLoginView.jsp,在密码下面加入<%--fan add start --%>
<img alt="yzm" src="captcha.jpg">
<spring:message code="screen.welcome.label.yzm.accesskey" var="yzmAccessKey" />
<form:input cssClass="required" cssErrorClass="error" id="yzm" size="25" tabindex="1" accesskey="${yzmAccessKey}" path="yzm" autocomplete="false" htmlEscape="true" />
<%--fan add end --%>
5. 最后一步则是注册验证码生成器,打开web.xml文件,加入
<servlet>
<servlet-name>jcaptcha</servlet-name>
<servlet-class>com.ivan.zhang.servlet.ImageCaptchaServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jcaptcha</servlet-name>
<url-pattern>/captcha.jpg</url-pattern>
</servlet-mapping>
ok,就这么简单.简单解释一下流程,web.xml中注册的类是用来调用自定义的验证码生成器,以便在显示登陆界面的时候绘制验证码图片,并在session中生成标志位并记录,当用户提交验证码和用户名密码时,会先走自定义的验证码验证器(此时会先验证验证码的正确性),如果正确,再走用户名和密码的验证,如果不正确,则直接跳转回登陆页面.yzm.jar是自定义的验证码生成器和验证类,直接打包好后放到web-info/lib下.
如有疑问,请留言
分享到:
相关推荐
在这个"登录 单点登录 带验证码登录"的实例中,我们将会深入探讨以下几个关键知识点: 1. **登录机制**:登录系统通常需要用户输入用户名和密码。在本示例中,登录过程可能是通过用户界面提交表单,后台Java代码...
golang单点登录系统(go-sso) 这是一个基于Go语言开发的单点登录系统,实现手机号注册,手机号+验证码登录,手机号+密码登录,账号登出等功能,用户认证采用cookie和jwt两种方式。方法已提供,仅需根据短信通道提供...
CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源单点登录(Single Sign-On, SSO)协议。SSO允许用户通过一次登录就能访问多个应用系统,而无需为每个系统分别进行身份验证。这种机制提高...
### Golang实现单点登录系统(go-sso)详解 #### 一、简介 单点登录(Single Sign-On,简称SSO)是一种常见的身份验证技术,它允许用户在多个应用程序和服务中使用一次登录来访问所有相互信任的应用程序。这种方式极...
验证码识别通常涉及以下几个关键技术点: 1. 图像预处理:首先,验证码图片需要经过一系列预处理步骤,如灰度化、二值化、噪声消除等,以简化图像并突出文字部分。在易语言中,可以利用图像处理库或自定义算法来...
在这个简单的例子中,可能使用了模板匹配,即预先存储各种字符的标准图像,然后与处理后的验证码图像中的字符进行比较,找出最匹配的模板。 5. **错误纠正**:如果识别出错,还可以引入错误纠正机制,如使用N-gram...
值得注意的是,尽管这个例子是简化的,实际的验证码识别可能会更复杂,涉及到深度学习和更复杂的图像处理技术,以应对更复杂的验证码设计。同时,为了增强安全性,开发者通常会不断更新验证码设计,使自动识别变得...
在这个易语言项目例子中,我们看到的是一个使用易语言编写的验证码识别程序源码,这对于初学者、学生以及小型开发团队来说,是一个很好的学习和实践资源。 易语言是一种基于中文的编程语言,它的设计目标是降低编程...
验证码(CAPTCHA)是一种防止自动程序进行恶意操作的技术,通常用于网站登录、注册、评论等场景,通过让用户输入图片中显示的扭曲文字或数字来验证其为真实的人。验证码识别项目则是为了模拟人类识别验证码的过程,...
验证码是一种常见的网络安全措施,用于防止自动机器人或恶意软件进行非法操作,例如注册、登录或者发送垃圾邮件。它通常由随机生成的字母、数字或符号组成,用户需要手动输入显示的验证码以证明自己是真实的人。 在...
在这个项目中,我们可以学习到以下几个关键知识点: 1. 图像处理:验证码通常以图像形式呈现,因此识别验证码需要对图像进行处理。这包括图像的灰度化、二值化、噪声消除等预处理步骤,以便更好地提取出文字特征。 ...
在这个易语言项目中,可能包括以下关键点: 1. 图像处理:首先,源码可能包含了读取和预处理验证码图片的模块。这可能包括灰度化、二值化、噪声去除、倾斜校正等步骤,目的是将复杂的彩色验证码图片转换为更易于...
在Vue3-Captcha的实现中,我们可以看到以下关键知识点: 1. **Composition API**:Vue3引入了Composition API,允许开发者将逻辑拆分成可重用的功能块,而不是局限于单个组件的选项对象中。这使得代码更加模块化,...
以及噪声去除,通过滤波器消除图像中的不规则像素点。 2. 图像分割:图像分割是识别过程的关键部分,它旨在将图像中的每个字符分离出来。可以采用连通组件分析或边缘检测算法来实现。在这个VC++例子中,可能会使用...
本压缩包中的“验证码取相连点算法易语言源码”提供了一个使用易语言实现的验证码字符分割方法,主要涉及图像处理和算法设计。 验证码取相连点算法是一种图像分析技术,它的目的是将验证码图像中的各个字符分离出来...
通过这个例子,你可以理解如何使用Tess4J库在Java环境中解析验证码,以及解决可能出现的依赖问题。实际应用中,根据验证码的具体格式和复杂程度,可能需要调整识别参数或进行额外的图像预处理,以提高识别准确率。
在提供的例子中,验证码图片来源于"http://www.pvpgame.com.cn/authimg.php",这是一个实际的网址,但请注意,实际操作时应遵守相关法律法规,不得侵犯他人隐私和网站安全。 验证码识别涉及的技术主要包括以下几个...
验证码识别是一种重要的信息安全技术,主要用于防止自动化程序(如机器人或爬虫)进行恶意操作,如批量注册、频繁登录等。本示例中的“验证码识别”着重于如何通过算法实现对图像验证码的解析。 验证码通常由一串...
在这个例子中,可能会用到GDI+(图形设备接口加)或者OpenCV等图像处理库的相关API,例如获取图像像素、滤波、边缘检测等,以提取验证码中的数字特征。 验证码识别通常涉及以下几个步骤: 1. 预处理:包括灰度化、...