由于每个版本的改动较大,所以先把版本号列出:

  服务端版本:cas server 4.0.0

  客户端版本:cas client 3.3.3

一、自定义登录页面

  页面路径:/WebContent/WEB-INF/view/jsp/default/ui/casLoginView.jsp

  在定义登录页面的时候,记住include cas自带的两个页面,不能少:

/WebContent/WEB-INF/view/jsp/default/ui/includes/bottom.jsp

/WebContent/WEB-INF/view/jsp/default/ui/includes/top.jsp

  注意以下核心代码的替换,其余的依葫芦画瓢:

<div class="fl con">
<div class="login_wrap">
<h1>中央登陆系统</h1>
<div class="login">
<form:form method="post" id="fm1" commandName="${commandName}" htmlEscape="true"> <div class="clearfix mb15">
<label for="account" class="fl">登录名:</label><input type="text" name="username" id="username" class="fl" required="true" />
</div>
<div class="clearfix mb15">
<label for="psd" class="fl">登录密码</label><input type="password" id="password" name="password" class="fl" required="true" />
</div>
<div class="clearfix lastline">
<span class="fl mt10"><input type="checkbox" class="check"><em>记住登录名</em></span> <input class="btn fl" name="submit" value="登陆" accesskey="l" tabindex="4" type="submit" />
</div>
<form:errors path="*" id="msg" cssClass="errors" element="div" htmlEscape="false" />
<h1><spring:message code="screen.welcome.instructions" /></h1>
<br />
<div id="loadInfo" style="color: #ffffff"></div>
<div id="loginRslt" style="color: red"></div>
<input type="hidden" name="lt" value="${loginTicket}" />
<input type="hidden" name="execution" value="${flowExecutionKey}" />
<input type="hidden" name="_eventId" value="submit" />
<!-- <input class="btn fl" name="submit" accesskey="l" tabindex="4" type="submit" /> -->
</form:form>
</div>
</div>
</div>

  标红的,在后台获取的时候必须写法保证一致!

二、自定义登录流程

  step1:由于cas在deployerConfigContext.xml中默认配置固定登录方式(用户名:casuser  密码:Mellon),所以第一步先注释如下代码:

 <bean id="primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
<!-- <property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
-->
</bean>

  step2:自定义认证类,此类继承AbstractUsernamePasswordAuthenticationHandler,重写authenticateUsernamePasswordInternal方法:

@Override
protected final HandlerResult authenticateUsernamePasswordInternal(
final UsernamePasswordCredential credential) throws GeneralSecurityException,
PreventedException {
// TODO Auto-generated method stub
//表单录入数据
final String userName = credential.getUsername();
final String password = credential.getPassword();
User u = new User();
u.setUserName(userName);
u.setPassword(MD5.getMD5(password));
boolean flag = dbService.checkAuth(u);
if (flag) {
return createHandlerResult(credential, new SimplePrincipal(userName), null);
}else if (adService.check(userName,password)) {
u = adService.GetADInfo(userName);
dbService.addUser(u);
return createHandlerResult(credential, new SimplePrincipal(userName), null);
}else {
throw new FailedLoginException("");
}
}

  自定义认证,还可以直接在deployerConfigContext.xml配置database,配置用户验证的sql。网上资料丰富,暂且不表。

  类编写完之后,注意将deployerConfigContext.xml配置的验证bean的类路径修改为你自定义的认证类:

 <bean id="primaryAuthenticationHandler"
class="xx.xx.xx">
<!-- <property name="users">
<map>
<entry key="casuser" value="Mellon"/>
</map>
</property>
-->
</bean>

三、自定义登录提示

  提示信息在/src/messages.properties配置,以下是验证失败之后,可以提示内容的配置:

# Authentication failure messages
authenticationFailure.AccountDisabledException=This account has been disabled.
authenticationFailure.AccountLockedException=This account has been locked.
authenticationFailure.CredentialExpiredException=Your password has expired.
authenticationFailure.InvalidLoginLocationException=You cannot login from this workstation.
authenticationFailure.InvalidLoginTimeException=Your account is forbidden to login at this time.
authenticationFailure.AccountNotFoundException=Invalid credentials.
authenticationFailure.FailedLoginException=\u7528\u6237\u540D\u6216\u5BC6\u7801\u9519\u8BEF.
authenticationFailure.UNKNOWN=Invalid credentials.

CAS实战の自定义登录的更多相关文章

  1. CAS实战の自定义注销

    步骤一 在cas server端,设置/WebContent/WEB-INF/cas-servlet.xml: <bean id="logoutAction" class=& ...

  2. CAS4.0.4 之自定义登录页实践

    因最近公司要用到cas登陆而且要使用自定登陆页面,网络上搜索了一下cas自定义登陆,比较好的两篇文章CAS 之自定义登录页实践和CAS 之 跨域 Ajax 登录实践,感觉写的不错,但是发现改动的地方很 ...

  3. CAS自定义登录验证方法

    一.CAS登录认证原理 CAS认证流程如下图: CAS服务器的org.jasig.cas.authentication.AuthenticationManager负责基于提供的凭证信息进行用户认证.与 ...

  4. cas sso单点登录系列3_cas-server端配置认证方式实践(数据源+自定义java类认证)

    转:http://blog.csdn.net/ae6623/article/details/8851801 本篇将讲解cas-server端的认证方式 1.最简单的认证,用户名和密码一致就登录成功 2 ...

  5. CAS 4.0.x 自定义登录页面

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] CAS默认登录页面 复制一个新的页面管理页面 修改页面引用 修改casproperties 修改casLoginViewjs ...

  6. (四)SSO之CAS框架单点登录,自定义验证登录方式

    应需求的变化,在登录cas的时候,默认根据用户名和密码进行验证,如果加上用户名,密码和一个系统标识进行验证呢?该如何做呢? 我们知道cas默认的登录界面中,输入的用户名和密码,再配置一下deploye ...

  7. 基于CAS的单点登录实战(2)-- 搭建cas的php客户端

    在这之前已经搭好了CAS服务端 基于CAS的单点登录实战(1)-- 搭建cas服务器 PHP-Client php-Client是官方支持的,去官网下个最新版就好了.phpCAS 接入很简单,解压放到 ...

  8. cas sso单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

    转:http://blog.csdn.net/ae6623/article/details/8848107 1)PPT流程图:ppt下载:http://pan.baidu.com/s/1o7KIlom ...

  9. CAS实现单点登录

    1.简介 SSO单点登录 在多个相互信任的系统中,用户只需要登录一次就可以访问其他受信任的系统. 新浪微博与新浪博客是相互信任的应用系统. *当用户首次访问新浪微博时,新浪微博识别到用户未登录,将请求 ...

随机推荐

  1. Bootstrap学习之路(1)---开篇-登陆页

    Bootstrap是现在很流行的一套前端框架,尤其是它的自适应,真的很不错,而且对移动设备也很友好,可以达到快速开发的效果,最近想把自己的网站弄个手机版,很果断的就选用了bootstrap,跟大家分享 ...

  2. 2018-2019-1 20165226《信息安全系统设计基础》 pwd命令的实现

    2018-2019-1 20165226<信息安全系统设计基础> pwd命令的实现 一.学习pwd 查看pwd 得知一个嫩过去文件路径的函数--getcwd i节点值 通过ls -i -a ...

  3. HDU 1969 Pie(二分,注意精度)

    Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  4. Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)?

    ylbtech-Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)? 1.返回顶部 1. Java 实例 - 如何执行指 ...

  5. c#中var类型用法同dynamic,object区别

    1.object万能对象:object只是个对象,是个强类型,在编译的时候确定类型了,只能用对象本身的方法属性等等,object想使用动态属性方法只能用反射. 2.var万能强类型. 3.dynami ...

  6. Linux知识温习

    进程间通信(IPC)介绍 mmap - 用户空间与内核空间 linux 进程地址空间的一步步探究 mmap 还是 shmget ? linux C/C++服务器后台开发面试题总结 Trie树详解及其应 ...

  7. Shell脚本的特性

    bash shell特性 1.命令补全和文件路径补全, 如果写错无法补全 table 2.命令历史记忆功能history 3.别名功能alias.unalias 4.常用快捷键ctrl+u,k,a,e ...

  8. php自动生成mysql的触发代码。

    如果公司里有上百个表要做触发器,如果手动写代码的话.很累,所以今天写了一个小程序, <?php $dbname = 'test';//数据库 $tab1 = 'user'; //执行的表 $ta ...

  9. C++中构造函数作用

    一. 构造函数是干什么的 class Counter { public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = ; } ...

  10. Python实践练习:疯狂填词

    题目 创建一个疯狂填词(Mad Libs)程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE.NOUN.ADVERB 或 VERB 等单词的地方,加上他们自己的文本. 例如,一个文 ...