CAS实战の自定义登录
由于每个版本的改动较大,所以先把版本号列出:
服务端版本: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实战の自定义登录的更多相关文章
- CAS实战の自定义注销
步骤一 在cas server端,设置/WebContent/WEB-INF/cas-servlet.xml: <bean id="logoutAction" class=& ...
- CAS4.0.4 之自定义登录页实践
因最近公司要用到cas登陆而且要使用自定登陆页面,网络上搜索了一下cas自定义登陆,比较好的两篇文章CAS 之自定义登录页实践和CAS 之 跨域 Ajax 登录实践,感觉写的不错,但是发现改动的地方很 ...
- CAS自定义登录验证方法
一.CAS登录认证原理 CAS认证流程如下图: CAS服务器的org.jasig.cas.authentication.AuthenticationManager负责基于提供的凭证信息进行用户认证.与 ...
- cas sso单点登录系列3_cas-server端配置认证方式实践(数据源+自定义java类认证)
转:http://blog.csdn.net/ae6623/article/details/8851801 本篇将讲解cas-server端的认证方式 1.最简单的认证,用户名和密码一致就登录成功 2 ...
- CAS 4.0.x 自定义登录页面
版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] CAS默认登录页面 复制一个新的页面管理页面 修改页面引用 修改casproperties 修改casLoginViewjs ...
- (四)SSO之CAS框架单点登录,自定义验证登录方式
应需求的变化,在登录cas的时候,默认根据用户名和密码进行验证,如果加上用户名,密码和一个系统标识进行验证呢?该如何做呢? 我们知道cas默认的登录界面中,输入的用户名和密码,再配置一下deploye ...
- 基于CAS的单点登录实战(2)-- 搭建cas的php客户端
在这之前已经搭好了CAS服务端 基于CAS的单点登录实战(1)-- 搭建cas服务器 PHP-Client php-Client是官方支持的,去官网下个最新版就好了.phpCAS 接入很简单,解压放到 ...
- cas sso单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析
转:http://blog.csdn.net/ae6623/article/details/8848107 1)PPT流程图:ppt下载:http://pan.baidu.com/s/1o7KIlom ...
- CAS实现单点登录
1.简介 SSO单点登录 在多个相互信任的系统中,用户只需要登录一次就可以访问其他受信任的系统. 新浪微博与新浪博客是相互信任的应用系统. *当用户首次访问新浪微博时,新浪微博识别到用户未登录,将请求 ...
随机推荐
- Bootstrap学习之路(1)---开篇-登陆页
Bootstrap是现在很流行的一套前端框架,尤其是它的自适应,真的很不错,而且对移动设备也很友好,可以达到快速开发的效果,最近想把自己的网站弄个手机版,很果断的就选用了bootstrap,跟大家分享 ...
- 2018-2019-1 20165226《信息安全系统设计基础》 pwd命令的实现
2018-2019-1 20165226<信息安全系统设计基础> pwd命令的实现 一.学习pwd 查看pwd 得知一个嫩过去文件路径的函数--getcwd i节点值 通过ls -i -a ...
- HDU 1969 Pie(二分,注意精度)
Pie Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)?
ylbtech-Java-Runoob-高级教程-实例-环境设置实例:3.Java 实例 - 如何执行指定class文件目录(classpath)? 1.返回顶部 1. Java 实例 - 如何执行指 ...
- c#中var类型用法同dynamic,object区别
1.object万能对象:object只是个对象,是个强类型,在编译的时候确定类型了,只能用对象本身的方法属性等等,object想使用动态属性方法只能用反射. 2.var万能强类型. 3.dynami ...
- Linux知识温习
进程间通信(IPC)介绍 mmap - 用户空间与内核空间 linux 进程地址空间的一步步探究 mmap 还是 shmget ? linux C/C++服务器后台开发面试题总结 Trie树详解及其应 ...
- Shell脚本的特性
bash shell特性 1.命令补全和文件路径补全, 如果写错无法补全 table 2.命令历史记忆功能history 3.别名功能alias.unalias 4.常用快捷键ctrl+u,k,a,e ...
- php自动生成mysql的触发代码。
如果公司里有上百个表要做触发器,如果手动写代码的话.很累,所以今天写了一个小程序, <?php $dbname = 'test';//数据库 $tab1 = 'user'; //执行的表 $ta ...
- C++中构造函数作用
一. 构造函数是干什么的 class Counter { public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = ; } ...
- Python实践练习:疯狂填词
题目 创建一个疯狂填词(Mad Libs)程序,它将读入文本文件,并让用户在该文本文件中出现 ADJECTIVE.NOUN.ADVERB 或 VERB 等单词的地方,加上他们自己的文本. 例如,一个文 ...