`
y806839048
  • 浏览: 1121338 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

cas login界面增加标记作用的属性(定义异常提示二)

    博客分类:
  • cas
cas 
阅读更多

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自定义登录页面

    CAS(Central Authentication Service)是一种基于Web的单一登录(Single Sign-On, SSO)协议,用于在网络上验证用户身份。它允许用户通过一个认证过程访问多个应用系统,而无需为每个系统分别进行登录。在你的场景...

    CAS自定义界面

    在本项目中,我们面临的是一个自定义CAS界面的任务,这通常涉及到对CAS服务器默认登录界面的个性化设计,以满足特定的用户交互需求或企业品牌形象。 首先,了解CAS的基本工作原理是必要的。当用户尝试访问受CAS保护...

    CAS认证通过却停留在业务系统登录界面无法登录

    标题中的“CAS认证通过却停留在业务系统登录界面无法登录”是一个常见的身份验证问题,涉及到CAS(Central Authentication Service)中央认证服务。CAS是一个开源的身份验证框架,用于在一个或多个人员访问的应用...

    SSO CAS Server 二次开发说明文档

    ### SSO CAS Server 二次开发说明文档 #### 环境搭建 为了便于进行二次开发,推荐使用Maven overlays特性来构建开发环境。这样可以利用最新版本的资源文件覆盖现有WAR包中的文件,无需手动导入整个`cas-server-...

    CAS-3.2.1自定义客户端登录界面----完整篇

    - CAS服务器默认提供了一个基本的登录界面,但可以通过修改`/WEB-INF/jsp/login.jsp`文件来定制。 - 需要了解JSP(JavaServer Pages)和HTML,以便修改布局、样式和交互元素。 - 可能还需要修改CSS和JavaScript...

    cas源码修改-登录页面

    在“cas源码修改-登录页面”这个主题中,我们将深入探讨如何定制CAS服务器的登录界面以满足特定需求。 首先,CAS的登录页面通常位于`/login`路径下,这是由CAS服务器的核心组件处理的。在源码中,这部分主要涉及到`...

    在CAS3.1配置PersonDirectory以获取除UserName外更多的属性

    3. **定义属性过滤器和合并策略**: 你可以通过`AttributeFilter`来筛选需要返回的属性,以及通过`AttributeMerger`来决定如何合并从不同源获取的相同属性。例如,你可以使用`...

    cas客户端集成单点登录代码

    在文件`caslogin`中,可能会包含示例代码或配置文件,用于演示如何在实际项目中实现上述步骤。这可能包括Spring Security CAS的配置XML文件、Java代码片段,或者相关的服务器和客户端配置文档。 通过遵循这些步骤,...

    H3C 云计算CAS产品典型配置案例汇总集.rar

    H3C_CAS基于集群增加共享存储操作指导书 H3C_CAS计算资源超配操作指导书 H3C_CAS_SSV云主机生命周期管理操作指导书 H3C_CAS_VDI虚拟桌面功能操作指导书 H3C_CAS本地用户批量导入功能操作指导书 H3C_CAS_CVM联动...

    CAS自定义加密和登录验证

    这可以通过修改`services.xml`配置文件或者使用CAS管理界面来完成。 3. **属性解析**:认证过程中,你可能还需要从后端系统获取用户属性,这可以通过实现`PrincipalResolver`接口来实现。解析后的属性可以用于授权...

    cas4.2.7 实现其他系统和cas互相认证互信

    2. **创建服务定义**:在CAS中为每个要信任的外部系统创建服务定义,指定该服务的URL和服务票证验证回调地址。 3. **集成CAS客户端库**:在外部系统中,需要集成CAS客户端库,如Java CAS Client、Spring Security ...

    CAS Protocol 3.0 Specification.docx 官方中文版教程详解

    如果已存在SSO session,CAS应提示用户已登录。 - **renew [可选]**:若设置此参数,无论是否存在SSO session,CAS都会要求用户提供凭证,不使用已有的登录状态。 **协议流程** 1. 用户尝试访问受CAS保护的服务。 ...

    cas 自定义登录页面

    在实际的企业环境中,根据业务需求,我们可能需要对默认的CAS登录页面进行自定义,以提供更符合品牌形象或用户体验的界面。下面将详细讲解如何配置和实现CAS的自定义登录页面。 一、CAS自定义登录页面概述 CAS的...

    CAS Server 4.1二次开发说明文档.docx

    ### CAS Server 4.1 二次开发说明 #### 概述 CAS (Central Authentication Service) 是一项由耶鲁大学发起的开源项目,旨在为Web应用系统提供可靠且灵活的单点登录(Single Sign-On, SSO)解决方案。随着业务场景的...

    cas对接 net系统说明文档

    if (string.IsNullOrEmpty(casLogin) || string.IsNullOrEmpty(casValidate)) { // 判断参数是否合法,不合法则返回错误信息 application.Response.StatusCode = 500; } } } ``` 在上述代码中,我们实现了`...

    CAS单点登录(SSO)服务端自定义认证+CAS客户端配置+CAS完整使用文档+CAS4.2.7 cas-serv服务端源码 cas-client客户端源码

    CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...

    cas-overlay-template-5.3

    9. **扩展性**:通过"cas-overlay-template-5.3",开发者可以轻松添加或修改CAS的配置,以适应特定的应用场景,比如添加新的服务定义,配置自定义的属性解析器,或者集成额外的安全组件。 10. **部署与维护**:模板...

    CAS 协议3.0

    在CAS2.0中添加了属性的传递,并在CAS3.0中给出了带有自定义属性的响应示例。 3. /proxyValidate:该接口用于验证代理票据的有效性,它也有自己的参数和响应格式。 4. /proxy:用于代理票据的获取。 5. /logout:...

    cas整合实例

    2. 配置服务定义:你需要在CAS服务器上注册你的应用,定义服务URL和服务ID,这样CAS服务器才能识别并处理来自你的应用的认证请求。 3. 配置客户端:在你的应用配置文件中,设置CAS的相关参数,如服务器URL、服务...

    shiro整合cas的实例

    - 配置 CAS 服务器的主要文件是 `cas.properties`,在这个文件中你可以设置服务器的基本属性,如端口、数据库连接信息等。 - CAS 服务器的认证页面可以自定义,通过修改 `templates/login.html` 文件来满足个性化...

Global site tag (gtag.js) - Google Analytics