cas4.0实现多种方式邮箱/手机号码登录及认证
先说多种方式登录的问题,这里使用手机号码和用户名
百度了半天网上能找到的办法都试了,似乎都不好使,要不就是需要修改源码
经过反复查看cas4.0源码,发现可以配置多个身份认证器,而且可以配置多个身份认证器的策略,这里用org.jasig.cas.authentication.AnyAuthenticationPolicy,即任何一个认证器通过就算通过。
这就好办多了,一切问题都好解决,废话不多说,直接上代码
下面是deployerConfigContext.xml
增加一个身份认证器
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager"><constructor-arg><map><entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" /><entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /><!--新增的认证器 注意key不能重复,并且key是一个bean--><entry key-ref="secondaryAuthenticationHandler" value-ref="secondaryPrincipalResolver" /></map></constructor-arg>
<!--多个认证器的认证策略--><property name="authenticationPolicy"><bean class="org.jasig.cas.authentication.AnyAuthenticationPolicy" /></property>
</bean><bean id="primaryPrincipalResolver"class="org.jasig.cas.authentication.principal.PersonDirectoryPrincipalResolver" ><property name="attributeRepository" ref="attributeRepository" />
</bean>
<!--新增的身份认处理器-->
<bean id="secondaryPrincipalResolver"class="org.jasig.cas.authentication.principal.PersonDirectoryPrincipalResolver" ><property name="attributeRepository" ref="attributeRepository2" />
</bean><bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"><constructor-arg index="0" ref="dataSource"/><constructor-arg index="1" value="select * from USER_INFO where {0}"/><property name="queryAttributeMapping"><map><!--这里的key需写username,value对应数据库字段--><!--客户端获取信息的时候带过来的用户身份标识对应的用户uid--><entry key="username" value="USERNAME"/></map></property><property name="queryType"><value>OR</value></property><property name="resultAttributeMapping"><map><!--key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值--><entry key="USERID" value="userId"/><entry key="MOBILE" value="mobile"/></map></property>
</bean>
<bean id="attributeRepository2" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"><constructor-arg index="0" ref="dataSource"/><constructor-arg index="1" value="select * from USER_INFO where {0}"/><property name="queryAttributeMapping"><map><!--这里的key需写username,value对应数据库字段--><!--客户端获取信息的时候带过来的用户身份标识对应的用户uid--><entry key="username" value="MOBILE"/></map></property><property name="queryType"><value>OR</value></property><property name="resultAttributeMapping"><map><!--key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值--><entry key="USERID" value="userId"/><entry key="USERTEL" value="userTel"/></map></property>
</bean><bean id="primaryAuthenticationHandler"class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"p:dataSource-ref="dataSource"p:passwordEncoder-ref="ignoreCasePasswordEncoder"p:sql="select USERPASSWORD from USER_INFO where USERNAME=?" />
<bean id="secondaryAuthenticationHandler"class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"p:dataSource-ref="dataSource"p:passwordEncoder-ref="ignoreCasePasswordEncoder"p:sql="select USERPASSWORD from USER_INFO where MOBILE=?" />
到这里就搞定了手机号码/用户名登录的问题,然而,又出现了个问题,这里查询了两次数据库登录时间有所延长,报了个错如下:
Cannot create a session after the response has been committed
继续百度,有人遇到过,是因为坑爹的cas在登录后两秒把session给end了,导致session获取不到,解决办法是在cas-servlet.xml 配置timeToDieInSeconds这个值
把时间设置长一些就好了
<bean id="terminateWebSessionListener" class="org.jasig.cas.web.flow.TerminateWebSessionListener"p:timeToDieInSeconds="60"/>
cas4.0实现多种方式邮箱/手机号码登录及认证相关推荐
- zju网页的自动登录和认证
无线认证登录 学校无线采用的是认证登陆的方式,但是登录无线认证需要打开浏览器,有时候网页很难跳转,所以希望找到一种能够快速的登录的方式.最近自学python,发现requests模块可以达到这个目的, ...
- 【项目】多种方式统一登录入口的设计方案
在编写项目的时候,通常会遇到很多情况下,需要实现统一登录入口.统一登录入口通常指的是:能够实现手机号.邮箱.用户名等信息登录,且共用一个登录入口. 这种登录方式现在属于一种主流的登录方式,除此之外,移 ...
- QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
目前有很多的SNS社区或类SNS的网站,例如开心.51.校内等,但是发现大多数社区在邀请好友的时候都没有提供对QQ邮箱或者QQ空间好友列表获取的功能,不过似乎海内支持,但是网上相关QQ的文章还不是很多 ...
- 苹果邮箱怎么登录qq邮箱_qq邮箱app下载安装-手机QQ邮箱2020下载v6.1.0 官方安卓版...
手机qq邮箱2020是一款网络通讯类软件应用.已经是许多人的首选邮箱应用,与qq相连,自己的联系人都可以发送邮件.更新后功能也更丰富更实用,帮你快速处理工作生活各类大小事件.感兴趣的用户欢迎来当易网下 ...
- 数据库用户表结构设计-多种注册方式含第三方登录
传统互联网已经过渡到移动互联网的时代,我们在开发android.ios.小程序等的时候,客户端的注册方式已经非常的丰富多样.所以,后台的用户表的设计也需要适应不同注册方式「不断扩张」及「相互绑定」的情 ...
- 2、cas4.0 单点登录 之 cas-client
cas4.0 单点登录 之 cas-client cas4.0 单点登录 之 https证书 已经做好了证书的准备工作,现在结合cas-server来配置单点登录: 一.安装cas服务端(cas-se ...
- 斐波那契数列python递归 0、1、1、2、3_python实现斐波那契数列的多种方式
正文共: 3269字 8图 预计阅读时间: 9分钟 每日分享 The great pleasure in life is doing what people say you cannot do. 人生 ...
- 怎么登录163vip邮箱,登录方式有哪些?
刚刚毕业,进入公司后都是用的客户端登录邮箱.上班来的有点晚,主管着急要个文件,没有办法客户端登录便对主管说:您打开我的电脑我告诉您在哪儿可以吗?主管:我们使用的Tom 163 vip 邮箱客户端.网页 ...
- html5+ mui框架 微信授权登录跳出手机号码登录方式
2019独角兽企业重金招聘Python工程师标准>>> 在HBuilder真机运行微信授权登录成功,但是使用ios离线集成后,点击微信授权登录,会跳出微信手机号码登录方式(会让你填入 ...
最新文章
- linux shell下获取cpu温度
- 我在兰亭这三年之跳出率升高门
- MySQL 5.7最新版本的2个bug
- postgres 显示变量_sql - 如何在PostgreSQL查询中声明变量
- [转]过度情绪化心智模式的10大特征——看看你有几个?
- CodeVS 1576 最长严格上升子序列 (DP)
- doc转换html软件,Doc文件格式转换工具(CoolUtils Total Doc Converter)
- Android 销毁当前页面
- 安防摄像头WEB端直播,实现按需播放,节省带宽和服务器压力
- 集算器(仓库版)发布,黑科技获得用户好评
- vb 6.0 常用工具(鼠标移动,代码补全,代码对齐)
- vscode无法更改文件夹名称
- 行为树(Behavior trees)
- NXP智能车竞赛笔记(室外电磁组)
- java bitset javadoc_Java数据结构: java.util.BitSet源码学习
- linux获取软电话信息,完整的SIP软电话工程实施过程
- C语言实现文件的加密解密
- 服务器减少一半,TDengine在华自科技的落地实践
- 在ICT求学时最大的痕迹
- 第四章 python中的循环结构