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

cas登陆页定义异常提示(中英文等

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

cas登陆页定义异常提示(中英文等):

 两种异常的处理方式不同,1,是通过配置文件指定用哪个异常类和方法 2,是通过继承AuthenticationViaFormAction类实现(见后文)

不同异常的提示,区分中英文

1, 定义好自定义异常

2,在执行异常的地方抛出

3,定义好捕捉异常的处理器

 

 

 

property属性文件:

 

authenticationFailure.AccountNotFoundException=户名或密码错误.

authenticationFailure.FailedLoginException=户名或密码错误.

authenticationFailure.AccountNotFoundExceptionEn=Invalid credentials.

authenticationFailure.FailedLoginExceptionEn=Invalid credentials.

 

 

 

 

1, 定义好自定义异常

 

 

 

package org.esteels.cas.validator;

 

import javax.security.auth.login.LoginException;

 

/**

 * Signals that user authentication failed.

 *

 * <p> This exception is thrown by LoginModules if authentication failed.

 * For example, a <code>LoginModule</code> throws this exception if

 * the user entered an incorrect password.

 *

 */

public class FailedLoginExceptionEn extends LoginException {

 

    private static final long serialVersionUID = 802556922354616286L;

 

    /**

     * Constructs a FailedLoginException with no detail message. A detail

     * message is a String that describes this particular exception.

     */

    public FailedLoginExceptionEn() {

        super();

    }

 

    /**

     * Constructs a FailedLoginException with the specified detail

     * message.  A detail message is a String that describes this particular

     * exception.

     *

     * <p>

     *

     * @param msg the detail message.

     */

    public FailedLoginExceptionEn(String msg) {

        super(msg);

    }

}

 

 

 

 

2,在执行异常的地方抛出(这里覆写后要修改配置文件引用此类的路径)

 public class QueryDatabaseAuthenticationHandler

   extends AbstractJdbcUsernamePasswordAuthenticationHandler

 {

 {

   @NotNull

   private String sql;

   

   protected final HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential credential)

     throws GeneralSecurityException, PreventedException

   {

        RemembermeAndCaptcha cuCredential = (RemembermeAndCaptcha) credential; 

      String username = credential.getUsername();

              int webflag= cuCredential.getWebflag();

      String encryptedPassword = getPasswordEncoder().encode(credential.getPassword());

     try {

        String dbPassword = (String)getJdbcTemplate().queryForObject(this.sql, String.class, new Object[] { username });

        if (!dbPassword.equals(encryptedPassword)) {

if(webflag==0){///中英文

throw new FailedLoginException("Password does not match value on record.");//哪种异常

}else{

throw new FailedLoginExceptionEn("Password does not match value on record."); 

}

          

       }

     } catch (IncorrectResultSizeDataAccessException e) {

        if (e.getActualSize() == 0) {

          throw new AccountNotFoundException(username + " not found with SQL query");

       }

        throw new FailedLoginException("Multiple records found for " + username);

     }

     catch (DataAccessException e) {

        throw new PreventedException("SQL exception while executing query for " + username, e);

     }

      return createHandlerResult(credential, new SimplePrincipal(username), null);

   }

 

 

 

 

 

3,定义好捕捉异常的处理器

 

 public class AuthenticationExceptionHandler

 {

   private static final String UNKNOWN = "UNKNOWN";

   private static final String DEFAULT_MESSAGE_BUNDLE_PREFIX = "authenticationFailure.";

   private static final List<Class<? extends Exception>> DEFAULT_ERROR_LIST = new ArrayList();

   

 

    private final Logger logger = LoggerFactory.getLogger(getClass());

   

   static {

      DEFAULT_ERROR_LIST.add(AccountLockedException.class);

      DEFAULT_ERROR_LIST.add(FailedLoginException.class);

      DEFAULT_ERROR_LIST.add(CredentialExpiredException.class);

     DEFAULT_ERROR_LIST.add(AccountNotFoundException.class);

     DEFAULT_ERROR_LIST.add(AccountDisabledException.class);

     DEFAULT_ERROR_LIST.add(InvalidLoginLocationException.class);

     DEFAULT_ERROR_LIST.add(InvalidLoginTimeException.class);

              DEFAULT_ERROR_LIST.add(FailedLoginExceptionEn.class);

              DEFAULT_ERROR_LIST.add(AccountNotFoundExceptionEn.class);

   }

   }

 

cas-servlet.xml:

 <bean id="authenticationExceptionHandler" class="org.esteels.cas.authentication.AuthenticationExceptionHandler" />//类中要增加比对哪些异常(复写)

 

AuthenticationExceptionHandler这个源码里面根据异常类名拼接配置属性,并获取值

 

 

 

  <action-state id="handleAuthenticationFailure">

    <evaluate expression="authenticationExceptionHandler.handle(currentEvent.attributes.error, messageContext)" />

    <transition on="AccountDisabledException" to="casAccountDisabledView"/>

    <transition on="AccountLockedException" to="casAccountLockedView"/>

    <transition on="CredentialExpiredException" to="casExpiredPassView"/>

    <transition on="InvalidLoginLocationException" to="casBadWorkstationView"/>

    <transition on="InvalidLoginTimeException" to="casBadHoursView"/>

    <transition on="FailedLoginException" to="generateLoginTicket"/>

    <transition on="AccountNotFoundException" to="generateLoginTicket"/>

     <transition on="FailedLoginExceptionEn" to="generateLoginTicket"/>

    <transition on="AccountNotFoundExceptionEn" to="generateLoginTicket"/>

    <transition on="UNKNOWN" to="generateLoginTicket"/>

  </action-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="generateServiceTicket">

        <evaluate expression="generateServiceTicketAction" />

<transition on="success" to ="warn" />

    <transition on="authenticationFailure" to="handleAuthenticationFailure" />

    <transition on="error" to="generateLoginTicket" />

<transition on="gateway" to="gatewayServicesManagementCheck" />

</action-state>

 

 

被注入的这个到那个视图

<action-state id="generateLoginTicket">

        <evaluate expression="generateLoginTicketAction.generate(flowRequestContext)" />

<transition on="generated" to="viewLoginForm" />

</action-state>

 

 

  这个视图有什么属性

 

<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>

 

分享到:
评论

相关推荐

    cas 自定义登录页面

    在CAS服务器的配置文件(如`cas.properties`或`application.yml`,取决于你的CAS版本)中,找到`cas.server.loginUrl`或`server.servlet.context-path/login`配置项,将其修改为你自定义登录页面的URL。例如: ```...

    cas 替换登陆页面配置步骤

    cas替换登陆页面配置步骤,可手动配置替换cas server的登陆界面

    cas源码修改-登录页面

    4. **服务管理**:在CAS中,每个需要认证的应用被称为“服务”。服务的配置通常在`cas-services.xml`或`application.yml`中。你可以定义服务的名称、ID、访问策略等,这将影响登录页面上显示的服务信息。 5. **主题...

    让CAS支持客户端自定义登陆页面——服务器篇[参考].pdf

    让CAS支持客户端自定义登陆页面需要在服务器端进行修改,包括添加新的处理器映射、控制器和流程执行器等。同时,需要遵守三个基本原则,以确保原有功能的完整性和安全性。 知识点: * CAS支持客户端自定义登陆页面...

    cas修改登录页

    2. **CAS配置**:修改登录页通常涉及修改CAS服务器的配置,可能需要在`cas-server-config.xml`等配置文件中调整视图相关的设置,以指向自定义的登录页面。 3. **Web应用程序开发**:你需要具备基本的Web开发技能,...

    cas自定义登录页面

    在CAS 3.5.2版本中,还包含了一些关键特性,例如支持多种认证机制(如LDAP、JDBC等),可扩展的服务注册,以及对不同协议(如CAS v1、v2、v3)的支持。对于开发者来说,可以通过修改配置文件(如`...

    CAS实现不同应用展示不同的登录页

    在实际操作中,可能还需要考虑其他因素,如语言本地化、自定义认证逻辑、以及如何处理失败的登录尝试等。同时,确保所有改动符合CAS的安全最佳实践,以防止潜在的安全风险。 总结,实现CAS系统下不同应用展示不同...

    cas客户端登陆配置文档

    8. **异常处理和错误页面**:确保正确处理各种可能的CAS相关异常,如认证失败、票据无效等,并配置合适的错误页面以提供用户友好的反馈。 9. **测试和调试**:完成配置后,进行详尽的测试,确保登录、登出、票证...

    struts2+cas单点登陆例子

    在这个例子中,我们将深入探讨如何在MyEclipse环境下使用Struts2框架与CAS服务器配合,实现单点登录功能。 首先,让我们理解一下CAS(Central Authentication Service)的核心概念。CAS是一个开放源码的SSO解决方案...

    自定义客户端登录CAS服务器-iframe实现

    标题中的“自定义客户端登录CAS服务器-iframe实现”是指一种基于CAS(Central Authentication Service)的认证方式,它利用iframe在不离开当前页面的情况下实现用户的单点登录(Single Sign-On,SSO)。CAS是一种...

    让CAS支持客户端自定义登陆页面——客户端篇

    标题中的“让CAS支持客户端自定义登陆页面——客户端篇”表明了本文主要探讨的是如何在中央认证服务(Central Authentication Service, CAS)系统中,允许客户端应用程序实现自定义登录页面的配置与实现。CAS是一个...

    java/android连接CAS登陆验证工具类

    用的java语言后台连接CAS登陆验证的工具类 特点: 1、无需修改CAS服务端的代码 2、能够自动获取ticket等参数值 3、这是一个工具类调用非常方便,不光适用于java也适用于android, 其他语言也可以参考,注释写的非常...

    基于springboot,cas5.3,shiro,pac4j,rest接口获取ticket不再跳转cas server登录页

    3. 使用Shiro进行权限控制:在Shiro配置中,我们可以定义一个自定义的CasRealm,该realm使用Pac4J进行认证。这样,当用户尝试访问受保护的资源时,Shiro将通过Pac4J与CAS交互,获取ticket并验证用户身份。 4. 实现...

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

    3. **集成CAS客户端库**:在外部系统中,需要集成CAS客户端库,如Java CAS Client、Spring Security CAS等,它们负责处理与CAS服务器的交互,包括重定向用户到CAS登录页面、接收和验证服务票证。 4. **配置客户端...

    cas单点登陆带attribute客户端示例程序

    这些测试用例通常会模拟CAS服务器的响应,确保客户端代码能够正确处理各种情况,如正常登录、票证验证失败、未授权等。 总结起来,这个"cas单点登陆带attribute客户端示例程序"是学习和实现CAS SSO的一个宝贵资源。...

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

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

    CAS介绍资源页面

    在"mooc_sso_cas"这个压缩包中,可能包含了关于CAS在在线教育平台(MoOC)SSO应用的示例代码、配置文件、教程文档等内容,帮助开发者更深入地理解和实践CAS的部署与使用。通过学习这些资料,你可以掌握如何配置CAS ...

    cas整合实例

    3. 配置客户端:在你的应用配置文件中,设置CAS的相关参数,如服务器URL、服务定义ID等。这将告诉客户端去哪里寻找CAS服务器,以及如何进行交互。 接下来,"cas-server"文件包含的是CAS服务器的组成部分。CAS服务器...

    cas单点登录实例

    1. **配置CAS服务器:** 安装并配置CAS服务器,如压缩包中的`cas-server-webapp-4.0.0 -cas`,包含CAS服务器的Web应用程序。 2. **配置应用系统:** 修改应用系统(如`casapp1`和`casapp2`)的配置,设置为信任CAS...

Global site tag (gtag.js) - Google Analytics