cas login界面增加标记作用的属性
login界面增加传值字段(比如中英文标志)
<form:input cssClass="form-control" type="hidden" path="webflag" autocomplete="false" htmlEscape="true" value="0"/>
<form:input cssClass="form-control" cssErrorClass="u_name" id="captcha" size="15" tabindex="1" type="text"
path="captcha" autocomplete="false" htmlEscape="true" placeholder="验证码"/>
使EsteelsAuthenticationViaFormAction这个类有效及哪里使用的配置
cas-servlet.xml
<!--自定义验证(验证码) -->
<bean id="authenticationViaFormAction" class="org.esteels.cas.validator.EsteelsAuthenticationViaFormAction"
p:centralAuthenticationService-ref="centralAuthenticationService"
p:warnCookieGenerator-ref="warnCookieGenerator"
p:ticketRegistry-ref="ticketRegistry"/>
login-webflow.xml
这个视图有什么属性,同时设置credential后增加的属性
<!--自定义类加入Rememberme,验证码参数-->
<var name="credential" class="org.esteels.cas.authentication.RemembermeAndCaptcha" />要增加的属性
<view-state id="viewLoginForm" view="casLoginView" model="credential">
<binder>
<binding property="username" />
<binding property="password" />
<!-- 增加验证码属性 -->
<binding property="captcha" />
<!-- 增加rememberMe属性 -->
<binding property="rememberMe" />
<!-- 判断中英文网站 -->
<binding property="webflag" />
</binder>
<on-entry>
<set name="viewScope.commandName" value="'credential'" />
</on-entry>
<transition on="submit" bind="true" validate="true" to="EsteelsValidator"><!-- 自定义验证 -->
<evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credential)" />
</transition>
</view-state>
<action-state id="realSubmit">
<evaluate expression="authenticationViaFormAction.submit(flowRequestContext, flowScope.credential, messageContext)" />
<transition on="warn" to="warn" />
<transition on="success" to="sendTicketGrantingTicket" />
<transition on="successWithWarnings" to="showMessages" />
<transition on="authenticationFailure" to="handleAuthenticationFailure" />
<transition on="error" to="generateLoginTicket" />
</action-state>
<action-state id="EsteelsValidator">
<evaluate expression="authenticationViaFormAction.customValidator(flowRequestContext, flowScope.credential, messageContext)"></evaluate>
<transition on="error" to="generateLoginTicket" />
<transition on="success" to="realSubmit" />
</action-state>
应用 (自定义异常)两种异常的处理方式不同,1,是通过配置文件指定用哪个异常类和方法 2,是通过继承AuthenticationViaFormAction类实现(见前文)
package org.esteels.cas.validator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.esteels.cas.authentication.RemembermeAndCaptcha;
import org.jasig.cas.authentication.Credential;
import org.jasig.cas.web.flow.AuthenticationViaFormAction;
import org.jasig.cas.web.support.WebUtils;
import org.springframework.binding.message.MessageBuilder;
import org.springframework.binding.message.MessageContext;
import org.springframework.util.StringUtils;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;
import com.google.code.kaptcha.Constants;
/**
* 自定义验证(验证码)
* @author zhouwentong
*
*/
public class EsteelsAuthenticationViaFormAction extends AuthenticationViaFormAction {
public final Event customValidator(RequestContext context, Credential credential, MessageContext messageContext) {
HttpServletRequest request =WebUtils.getHttpServletRequest(context);
HttpSession session = request.getSession();
String captcha = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
session.removeAttribute(Constants.KAPTCHA_SESSION_KEY);
RemembermeAndCaptcha cuCredential = (RemembermeAndCaptcha) credential;
String submitCaptcha= cuCredential.getCaptcha();
String uname=cuCredential.getUsername();
String pass=cuCredential.getPassword();
int webflag=cuCredential.getWebflag();
if (!StringUtils.hasText(uname)) {
if(webflag==0){
messageContext.addMessage(new MessageBuilder().error().code("required.username").build());
return new Event(this, ERROR);
}else{
messageContext.addMessage(new MessageBuilder().error().code("required.username.en").build());
return new Event(this, ERROR);
}
}
if (!StringUtils.hasText(pass)) {
if(webflag==0){
messageContext.addMessage(new MessageBuilder().error().code("required.password").build());
return new Event(this, ERROR);
}else{
messageContext.addMessage(new MessageBuilder().error().code("required.password.en").build());
return new Event(this, ERROR);
}
}
if (!StringUtils.hasText(submitCaptcha)) {
if(webflag==0){
messageContext.addMessage(new MessageBuilder().error().code("login.required.captcha").build());
return new Event(this, ERROR);
}else{
messageContext.addMessage(new MessageBuilder().error().code("login.required.captcha.en").build());
return new Event(this, ERROR);
}
}
if (submitCaptcha.equals(captcha)) {
return new Event(this, SUCCESS);
}else{
if(webflag==0){
messageContext.addMessage(new MessageBuilder().error().code("login.captcha.error").build());
return new Event(this, ERROR);
}else{
messageContext.addMessage(new MessageBuilder().error().code("login.captcha.error.en").build());
return new Event(this, ERROR);
}
}
}
}
package org.esteels.cas.authentication;
import org.jasig.cas.authentication.RememberMeUsernamePasswordCredential;
/**
* 增加验证码 RememberMe字段
* @author zhouwentong
*
*/
public class RemembermeAndCaptcha extends RememberMeUsernamePasswordCredential{
private static final long serialVersionUID = 5034129937759981063L;
private String captcha;
private int webflag;//判断中英文网站
public String getCaptcha() {
return captcha;
}
public void setCaptcha(String captcha) {
this.captcha = captcha;
}
public int getWebflag() {
return webflag;
}
public void setWebflag(int webflag) {
this.webflag = webflag;
}
}
相关推荐
我使用的cas-server-3.5.2版本,这个是已经修改好的。直接解压放到tomcat/webapp下就可以了
项目不是maven类,导入编译器的时候需注意,之前的部署流程可以网上查看其它文档,大体上都相同。
CAS Server 4.0二次开发说明文档, SSO
CAS单点登录产品具有很多优点,如减少用户在不同系统中登录耗费的时间,减少用户登录出错的可能性,实现安全的同时避免了处理和保存多套系统用户的认证信息,减少了系统管理员增加、删除用户和修改用户权限的时间,...
NULL 博文链接:https://ymhh.iteye.com/blog/678015
由于登录界面发生改变,请求参数增加了账号所在的系统名称,所以,登录凭据也不能继续使用UsernamePasswordCredentials,而是要自定义一个包含了系统名称的Credentials,并进行配置让CAS服务器启用这个自定义的...
H3C_CAS_LINUX安装cas-tools 在虚拟化环境中,安装 CAS Tools 是一个非常重要的步骤。CAS Tools 是一个功能强大的虚拟化管理平台,能够帮助管理员更方便地管理和维护虚拟机。下面,我们将详细介绍如何在 Linux 系统...
包含cas源码、cas使用说明文档(包含配置信息)、连接数据库所需jar包、cas服务端自定义返回值等
cas4.0版本的 单点登录 自定义页面。希望对你有用,最低资源分,辛苦分。有问题可以交流学习。谢谢
cas 单点登录解决方案可以在不同的层面上进行集成,例如在数据存储层面上的“数据大集中”,在传输层面上的“通用数据交换平台”,在应用层面上的“业务流程整合”,和用户界面上的“通用企业门户”等等。cas 单点...
cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x集成cas4.1.x...
1.CAS-集成mysql 2.CAS-日志审计 3.CAS-连接池配置 4.CAS-自定义错误信息 5.CAS-识别json文件 6.CAS-页面缓存记住我 7.CAS-cookie设置 8.CAS-tgc设置 9.CAS-登出 10.CAS-redisCluster集群存储ticket(相应redis必须...
CAS单点登录示例,只能用炫酷来形容,感兴趣就下载看看吧
CAS协议,包括cas1.0和cas2.0的协议,cas 协议分为两部分,一部分是票据-ticket,一部分是url。
H3C CAS系统维护 H3C CAS日志维护 H3C CAS案例集 H3C CAS主机异常问题定位介绍 H3C CAS系统变更要求 H3C CAS版本升级方案介绍 H3C CAS系统命令
CAS单点登录,退出后ticket失效报出异常解决办法——换jar包 把客户端的 casclient.jar 包换成我的这个。
cas替换登陆页面配置步骤,可手动配置替换cas server的登陆界面
cas源码,可直接使用 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS 是 Yale ...
H3C_CAS基于集群增加共享存储操作指导书 H3C_CAS计算资源超配操作指导书 H3C_CAS_SSV云主机生命周期管理操作指导书 H3C_CAS_VDI虚拟桌面功能操作指导书 H3C_CAS本地用户批量导入功能操作指导书 H3C_CAS_CVM联动...
cas-server-webapp-tomcat-5.3.16.war maven依赖包