目录

1.首先要在注册Service的json中配置返回信息的规则

2.为什么会只返回用户名给客户端呢

3.配置注册service的json文件

4.修改表单处理器Handler中添加返回结果

效果演示


CAS服务端默认是只返回登录的用户名,不会返回用户其他的信息,假如我们还需要用户的id,手机号之类的信息怎么办? 可以修改cas服务端,返回更多的信息给客户端。

参考官网
https://apereo.github.io/cas/development/integration/Attribute-Release-Policies.html

1.首先要在注册Service的json中配置返回信息的规则

比如:客户端A需要姓名和身份证号,客户端B需要昵称和头像这些公开信息,具体规则有如下:
● Return All (所有配置返回的都返回)
● Deny All (配置拒绝的出现则报错)
● Return Allowed(只返回允许的主要属性)
● 自定义Filter(自定义过滤策略)
常用为Return All、Return Allowed

2.为什么会只返回用户名给客户端呢

还记得前面自定义handler处理的时候,在验证成功后,返回的结果,具体代码如下:

只是将用户名放进去了,点进去看看底层代码,不出所料,有一个两个参数的重载方法,如下:

只需要将返回的信息,放入一个map中,return回去就可以了。
关于自定义验证,参考前面的博客,之前已经说过了,自定义验证很重要。

具体操作如下
这里演示Return All、Return Allowed 两种情况,

3.配置注册service的json文件

客户端1配置返回所有信息

{"@class" : "org.apereo.cas.services.RegexRegisteredService","serviceId" : "^(https|imaps|http)://app1.cas.com.*","name" : "测试客户端app1","id" : 1000,"description" : "这是app1的客户端","evaluationOrder" : 10,"theme" : "app1","attributeReleasePolicy" : {"@class" : "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"}
}

客户端2配置返回姓名和身份证号


{"@class" : "org.apereo.cas.services.RegexRegisteredService","serviceId" : "^(https|imaps|http)://app2.cas.com.*","name" : "测试客户端app2","id" : 1001,"description" : "这是app2的客户端","evaluationOrder" : 11,"theme" : "app2","attributeReleasePolicy" : {"@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy""allowedAttributes" : [ "java.util.ArrayList", [ "name", "id_card_num" ] ]}
}

4.修改表单处理器Handler中添加返回结果

package com.wangsaichao.cas.adaptors.generic;import com.wangsaichao.cas.exception.CaptchaErrorException;
import com.wangsaichao.cas.exception.MyAccountNotFoundException;
import com.wangsaichao.cas.service.UserService;
import org.apache.commons.lang3.StringUtils;
import org.apereo.cas.authentication.AuthenticationHandlerExecutionResult;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.authentication.PreventedException;
import org.apereo.cas.authentication.handler.support.AbstractPreAndPostProcessingAuthenticationHandler;
import org.apereo.cas.authentication.principal.PrincipalFactory;
import org.apereo.cas.services.ServicesManager;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.security.auth.login.AccountLockedException;
import javax.security.auth.login.CredentialExpiredException;
import javax.security.auth.login.FailedLoginException;
import java.security.GeneralSecurityException;
import java.util.Map;/*** @author: wangsaichao* @date: 2018/8/31* @description:*/
public class RememberMeUsernamePasswordCaptchaAuthenticationHandler extends AbstractPreAndPostProcessingAuthenticationHandler {private UserService userService;public UserService getUserService() {return userService;}public void setUserService(UserService userService) {this.userService = userService;}public RememberMeUsernamePasswordCaptchaAuthenticationHandler(String name, ServicesManager servicesManager, PrincipalFactory principalFactory, Integer order) {super(name, servicesManager, principalFactory, order);}@Overrideprotected AuthenticationHandlerExecutionResult doAuthentication(Credential credential) throws GeneralSecurityException, PreventedException {RememberMeUsernamePasswordCaptchaCredential myCredential = (RememberMeUsernamePasswordCaptchaCredential) credential;String requestCaptcha = myCredential.getCaptcha();ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();Object attribute = attributes.getRequest().getSession().getAttribute("captcha");String realCaptcha = attribute == null ? null : attribute.toString();if(StringUtils.isBlank(requestCaptcha) || !requestCaptcha.toUpperCase().equals(realCaptcha)){throw new CaptchaErrorException("验证码错误");}String username = myCredential.getUsername();Map<String, Object> user = userService.findByUserName(username);if(user == null){throw new MyAccountNotFoundException("用户不存在");}//可以在这里直接对用户名校验,或者调用 CredentialsMatcher 校验if (!user.get("password").equals(myCredential.getPassword())) {throw new CredentialExpiredException("用户名或密码错误!");}//这里将 密码对比 注销掉,否则 无法锁定  要将密码对比 交给 密码比较器 在这里可以添加自己的密码比较器等//if (!password.equals(user.getPassword())) {//    throw new IncorrectCredentialsException("用户名或密码错误!");//}if ("1".equals(user.get("state"))) {throw new AccountLockedException("账号已被锁定,请联系管理员!");}return createHandlerResult(credential, this.principalFactory.createPrincipal(username,user));}@Overridepublic boolean supports(Credential credential) {return credential instanceof RememberMeUsernamePasswordCaptchaCredential;}
}

上面的情况是写在json文件中的,还记得我们前面讲过动态注册service,动态注册service的信息是在代码中生成和json文件相似的信息存入到数据库中,假如是动态注册service的情况该怎么办呢?其实前面的代码中也有写,具体代码如下:

效果演示

CAS-01 关于CAS服务端设置自定义返回参数给CAS-CLIENT相关推荐

  1. CAS流程简析 服务端校验Ticket

    相关阅读 CAS基础组件 简介 CAS流程简析 服务端处理未携带Service登录请求 CAS流程简析 服务端处理携带Service登录请求 CAS基础组件 客户端过滤器 简介 用户访问客户端的请求若 ...

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

    落雨 cas 单点登录 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的 ...

  3. CAS (1) —— Mac下配置CAS到Tomcat(服务端)(转)

    tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-client-3.4.1 参考来源: CAS实现单点登录(SSO)经典完整 ...

  4. 单点登录 cas 二次开发 服务端开发【系列一】

    版本说明: cas5.3.mysql5.7.tomcat8.5.jdk8 1.服务端下载 下载5.3版本,下载地址 https://github.com/apereo/cas-overlay-temp ...

  5. cas 5.3.x 服务端搭建(一)

    前期准备: 服务端官⽅下载:https://github.com/apereo/cas-overlay-template 客户端官⽅下载:https://githu b.com/cas-project ...

  6. 服务端设置忽略更新_react服务端渲染: cookie如何透传给后端,后端如何设置cookie...

    原文链接: react服务端渲染: cookie如何透传给后端,后端如何设置cookie​www.douyacun.com react 服务端渲染 cookie 有2个问题: 服务端执行的代码如何拿到 ...

  7. 服务端设置忽略更新_深入理解Kafka服务端之日志对象的读写数据流程

    一.场景分析 在前面几篇分析过,Log类用于管理服务端日志相关的各种操作,如: 日志段管理:滚动生成新日志段.组织并管理分区下的所有日志段等 关键偏移量管理:如LogStartOffset.LEO等 ...

  8. 传奇私服开服架设教程 传奇服务端设置教程

    首先开区要使用两个必备的软件:DBC2000.传奇引擎,当然也少不了传奇服务端(传奇服务端在论坛免费服务端和商业服务端中有下载). 先把下载好的服务端解压到D盘或者某个般的根目录(所谓根目录,就是D盘 ...

  9. 深入浅出 gRPC 01:gRPC 服务端创建和调用原理

    目录 1. RPC 入门 1.1 RPC 框架原理 1.2 业界主流的 RPC 框架 1.3 gRPC 简介 1.3.1 gRPC 概览 1.3.2 gRPC 特点 2. gRPC 服务端创建 2.1 ...

最新文章

  1. Rust基础笔记:Getting input from the console
  2. 解析#pragma指令
  3. 【系统分析与设计】业务流程图绘制方法
  4. Nginx 笔记与总结(3)配置虚拟主机
  5. abp mysql .net core_ABP .Net Core Entity Framework迁移使用MySql数据库
  6. 小米9稳定版系统更新:加入水滴屏形状切换开关
  7. 大公司都有哪些开源项目~~~简化版
  8. 关于 if __name__ == '__main__' 的理解
  9. 16款最佳的 jQuery Time Picker 时间选择插件
  10. 数据库软件access mysql对比_access数据库软件优缺点对比
  11. C语言醉酒,驾驶人在道路上饮酒醉酒驾驶机动车处3年以上有期徒刑
  12. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph (有上下界可行流)
  13. 广义表的链式定义和基础操作
  14. 2020美赛赛后感想总结
  15. 小白学习Spring(二)
  16. 计算机网络 HTTP请求及响应首部字段
  17. 计算机辅助制造卜昆内容,西北工业大学07年硕士生入学考试专业课大纲(428计算机辅助制造)...
  18. error怎么开机 fan_台式机开机出现cpu fan error怎么办
  19. 和王兴并肩战斗十余年,王慧文的精华思考都在这里了
  20. 【学习笔记】人工智能哲学研究:《心智、语言和机器》

热门文章

  1. Python 实现MeanShift算法
  2. linux服务器里边ftp命令,Linux SSH使用FTP命令与另一台服务器的FTP的传输说明
  3. Kali入侵Windows主机
  4. JSP开发模式(四种模式)
  5. pdf如何去除水印文字?这个办法值得一试
  6. android4.4.2康佳电视,康佳电视怎么连接手机 康佳电视连接手机步骤【图文介绍】...
  7. 【游戏程序设计】地图拼接
  8. [Win10] HM 软件安装
  9. python - 通配符
  10. 如何下载学习通mooc上的课件,不需要任何工具