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(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,用于在网络上验证用户身份。它允许用户通过一个认证过程访问多个应用系统,而无需为每个系统分别进行登录。在你的场景...
在本项目中,我们面临的是一个自定义CAS界面的任务,这通常涉及到对CAS服务器默认登录界面的个性化设计,以满足特定的用户交互需求或企业品牌形象。 首先,了解CAS的基本工作原理是必要的。当用户尝试访问受CAS保护...
标题中的“CAS认证通过却停留在业务系统登录界面无法登录”是一个常见的身份验证问题,涉及到CAS(Central Authentication Service)中央认证服务。CAS是一个开源的身份验证框架,用于在一个或多个人员访问的应用...
### SSO CAS Server 二次开发说明文档 #### 环境搭建 为了便于进行二次开发,推荐使用Maven overlays特性来构建开发环境。这样可以利用最新版本的资源文件覆盖现有WAR包中的文件,无需手动导入整个`cas-server-...
- CAS服务器默认提供了一个基本的登录界面,但可以通过修改`/WEB-INF/jsp/login.jsp`文件来定制。 - 需要了解JSP(JavaServer Pages)和HTML,以便修改布局、样式和交互元素。 - 可能还需要修改CSS和JavaScript...
在“cas源码修改-登录页面”这个主题中,我们将深入探讨如何定制CAS服务器的登录界面以满足特定需求。 首先,CAS的登录页面通常位于`/login`路径下,这是由CAS服务器的核心组件处理的。在源码中,这部分主要涉及到`...
3. **定义属性过滤器和合并策略**: 你可以通过`AttributeFilter`来筛选需要返回的属性,以及通过`AttributeMerger`来决定如何合并从不同源获取的相同属性。例如,你可以使用`...
在文件`caslogin`中,可能会包含示例代码或配置文件,用于演示如何在实际项目中实现上述步骤。这可能包括Spring Security CAS的配置XML文件、Java代码片段,或者相关的服务器和客户端配置文档。 通过遵循这些步骤,...
H3C_CAS基于集群增加共享存储操作指导书 H3C_CAS计算资源超配操作指导书 H3C_CAS_SSV云主机生命周期管理操作指导书 H3C_CAS_VDI虚拟桌面功能操作指导书 H3C_CAS本地用户批量导入功能操作指导书 H3C_CAS_CVM联动...
这可以通过修改`services.xml`配置文件或者使用CAS管理界面来完成。 3. **属性解析**:认证过程中,你可能还需要从后端系统获取用户属性,这可以通过实现`PrincipalResolver`接口来实现。解析后的属性可以用于授权...
2. **创建服务定义**:在CAS中为每个要信任的外部系统创建服务定义,指定该服务的URL和服务票证验证回调地址。 3. **集成CAS客户端库**:在外部系统中,需要集成CAS客户端库,如Java CAS Client、Spring Security ...
如果已存在SSO session,CAS应提示用户已登录。 - **renew [可选]**:若设置此参数,无论是否存在SSO session,CAS都会要求用户提供凭证,不使用已有的登录状态。 **协议流程** 1. 用户尝试访问受CAS保护的服务。 ...
在实际的企业环境中,根据业务需求,我们可能需要对默认的CAS登录页面进行自定义,以提供更符合品牌形象或用户体验的界面。下面将详细讲解如何配置和实现CAS的自定义登录页面。 一、CAS自定义登录页面概述 CAS的...
### CAS Server 4.1 二次开发说明 #### 概述 CAS (Central Authentication Service) 是一项由耶鲁大学发起的开源项目,旨在为Web应用系统提供可靠且灵活的单点登录(Single Sign-On, SSO)解决方案。随着业务场景的...
if (string.IsNullOrEmpty(casLogin) || string.IsNullOrEmpty(casValidate)) { // 判断参数是否合法,不合法则返回错误信息 application.Response.StatusCode = 500; } } } ``` 在上述代码中,我们实现了`...
CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...
9. **扩展性**:通过"cas-overlay-template-5.3",开发者可以轻松添加或修改CAS的配置,以适应特定的应用场景,比如添加新的服务定义,配置自定义的属性解析器,或者集成额外的安全组件。 10. **部署与维护**:模板...
在CAS2.0中添加了属性的传递,并在CAS3.0中给出了带有自定义属性的响应示例。 3. /proxyValidate:该接口用于验证代理票据的有效性,它也有自己的参数和响应格式。 4. /proxy:用于代理票据的获取。 5. /logout:...
2. 配置服务定义:你需要在CAS服务器上注册你的应用,定义服务URL和服务ID,这样CAS服务器才能识别并处理来自你的应用的认证请求。 3. 配置客户端:在你的应用配置文件中,设置CAS的相关参数,如服务器URL、服务...
- 配置 CAS 服务器的主要文件是 `cas.properties`,在这个文件中你可以设置服务器的基本属性,如端口、数据库连接信息等。 - CAS 服务器的认证页面可以自定义,通过修改 `templates/login.html` 文件来满足个性化...