Spring Boot集成CAS客户端

本教程是通过访问url来进入登录界面。

需求:
我们开发平台有很多学校在使用,需要接入每个学校的统一认证CAS系统。

1.服务端设置授权域名或者IP

2.访问地址

完整的访问路径:
https://xxx.xxx.xxx.xxx.cn/sso/login?service=https://xxx.xxxx.cn/svc/sso/login/callback/ahjzu



登录成功后,服务端将信息通过回调地址返回给客户端。

3.客户端导入jar包

pom引入本地jar包

4.过滤器配置文件

package com.wst.oss.common.filter.lib;import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;
import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.EventListener;
import java.util.HashMap;
import java.util.Map;/*** 配置过滤规则* <p>* setFilter(),设置过滤器的类* <p>* setUrlPatterns(),设置拦截的路径* <p>* setInitParameters(),设置初始化的一些参数* <p>* setOrder(),设置优先过滤的级别,越小越优先。** @author yangjingsong* @since 2020/7/7*/
@Configuration("ahjzu")
public class AhjzuFilterConfig {/*** 添加监听器* @return*/@Beanpublic ServletListenerRegistrationBean<EventListener> ahjuzSingleSignOutListenerRegistration() {ServletListenerRegistrationBean<EventListener> registrationBean = new ServletListenerRegistrationBean<EventListener>();registrationBean.setListener(new SingleSignOutHttpSessionListener());registrationBean.setOrder(2);return registrationBean;}//该过滤器负责对Ticket的校验工作,必须启用它@Beanpublic FilterRegistrationBean ahjzuCas20ProxyReceivingTicketValidationFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new Cas20ProxyReceivingTicketValidationFilter());registration.addUrlPatterns("/login/callback/ahjzu"   //这个);registration.setName("CAS Validation Filter ahjzu");Map<String, String> init = new HashMap<>();init.put("casServerUrlPrefix", "https://sso.xxx.xxx.xxx.cn/sso/");//服务端地址init.put("serverName", "https://xxx.xxx.cn/svc/sso");//客户端地址init.put("encoding", "UTF-8"); //去身份认证的校验的时候也需要加一个编码registration.setInitParameters(init);registration.setOrder(3);return registration;}/*** 该过滤器负责实现HttpServletRequest请求的包裹,* 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置*/@Beanpublic FilterRegistrationBean ahjzuHttpServletRequestWrapperFilter() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new HttpServletRequestWrapperFilter());registration.addUrlPatterns("/login/callback/ahjzu");registration.setName("CAS HttpServletRequest Wrapper Filter ahjzu");registration.setOrder(4);return registration;}}

5、获取信息代码

@Controller
@RequestMapping("login")
public class AhjzuLoginController {@Value("${AUTH_SERVICE_ENDPOINT}")private String controlHost;@Resourceprivate RestTemplate restTemplate;@GetMapping("/callback/ahjzu")public void callback( HttpServletRequest request, HttpServletResponse response) throws IOException {String tenantId ="ahjzu";//SSO登录用户的登录名String remoteUser = request.getRemoteUser();//获取信息Assertion assertion = (Assertion) request.getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);Principal principal = request.getUserPrincipal();if(StringUtils.isNotEmpty(remoteUser)) {//获取我们系统内tokenResult<Map> result = getAuthToken(remoteUser, tenantId);if (result != null && result.getCode().equals(BuzCode.SUCCEED.getCode())) {          CookieUtils.setCookieWithoutFlush(response, "Authorization", (String) result.getData().get("access_token"), CookieUtils.COOKIE_MAX_AGE);}response.sendRedirect("https://"+tenantId+".xxx.cn/xxxx/front");}}

6.退出

登出地址格式:
https://xxx.xxx.xxx.xxx.cn/sso/logout?service=https://abc.abcd.cn/svc/sso/logout/ahjzu

回调代码

/*** 统一接口退出* @author czm* @date 2021/4/17 18:15*/@Controller
@RequestMapping("logout")
public class SsoLogoutController {/*** 退出* @param session* @return* tenantId 不同单位代码*/@RequestMapping("/{tenantId}")public void logout(@PathVariable("tenantId")String tenantId,HttpSession session,HttpServletRequest request, HttpServletResponse response) throws IOException {session.invalidate();response.sendRedirect("https://"+tenantId+".xxx.cn/reader/front");}
}

7.多个服务端

当一个客户端需要对接多个服务端时,需要配置多个过滤器文件。
每个过滤器文件中方法名要区分开不能相同。
过滤路径和服务端地址需要更改。



欢迎大家留言点赞。
转发请标明出处。

CAS认证登录,CAS客户端配置并对接多个不同服务端(spring boot)相关推荐

  1. linux服务器和客户端配置,Linux基础教程:YUM服务端与客户端配置步骤

    服务端配置:(分两种情况,rhce无需掌握,感兴趣的话可以研究): 情况1.yum直接使用光盘(光盘仓库默认做好了)做服务端配置 方式一:直接挂载光驱使用 mkdir /mnt/dvd mount / ...

  2. CAS 5.1.x 的搭建和使用(四)—— 配置使用HTTP协议访问的服务端

    CAS单点登录系列: CAS 5.1.x 的搭建和使用(一)-- 通过Overlay搭建服务端CAS 5.1.x 的搭建和使用(二)-- 通过Overlay搭建服务端-其它配置说明CAS 5.1.x ...

  3. cas单点登录-https的配置(一)

     前言   由于个人的兴趣和为了加薪,在这里研究下cas单点登录,同时也记录下自己探索的过程,希望也能帮到有同样兴趣的小伙伴 环境 CAS-5.1.3 tomcat8.5 jdk8 centos6.5 ...

  4. cas 单点登录 http 方式配置实现

    前言: 单点登录指的是在系统的集群中,登录其中一个子系统就可以无需再次登录访问其他的子系统或者主系统,目前比较流行的单点登录的解决方案就是使用 cas的方式 准备: 1.下载一个 cas-server ...

  5. CAS单点登录(五)——Service配置及管理

    在上一节我们讲述了CAS中关于自定义认证登录策略,对CAS中关于自定义登录配置的方案,校验策略有了一定的了解,如果忘记了可以去复习一下------CAS单点登录(四)--自定义认证登录策略.这节本来该 ...

  6. 全局配置_配置全局异常处理,结果没有想到,spring boot实践(3)

    01 spring boot读取配置信息 02 多环境配置 这个功能详细大家在项目中也经常遇到,通常我们在写controller的时候会定义一个全局的异常处理.任何的controller出现异常都会进 ...

  7. Socket通信 客户端加密数据,传递数据密文到服务端,服务端解密密文 输出明文

    server // sdf_cpp_warpper.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束. // server端#ifndef UNICODE # ...

  8. android新浪登录接口,新浪游戏AndroidSDK接入文档—服务端.md

    # SNG联运游戏平台接口文档ForCP(服务端) ## 1.用户接口 ### 1.1.用户信息校验接口(服务端) http://m.game.weibo.cn/api/sdk/user/check. ...

  9. socket java 发送多次 socket 已关闭_Socket客户端循环发送多条信息给服务端,发一次socket自动关闭?...

    目的:通过Socket客户端发送多条数据给服务端 错误: 我是客户端0,服务器说:欢迎您! java.net.SocketException: Socket is closed at java.net ...

最新文章

  1. Java 解惑:Comparable 和 Comparator 的区别
  2. Linux 探索之旅 | 第三部分第五课:延时执行,唯慢不破
  3. leetcode算法题--重排链表★
  4. 十分钟掌握pyecharts十类顶级图,都很实用!
  5. 云原生高可用技术体系的构建
  6. 简单了解Vue的自定义组件与生命周期
  7. css 相对定位 ie7问题
  8. java并发-内存模型与volatile
  9. Homework 1_SQL Server中由于外键约束而删除数据失败
  10. 一个java写的贪吃蛇程序
  11. 根据IP获取国家地区
  12. DVWA网盘下载和安装教程 详解
  13. DataGear 制作自适应任意屏幕尺寸的数据可视化看板
  14. 怎么制作gif动态图,静态图片转成动态图的方法分享!
  15. Python3爬虫-selenium爬取百度文库
  16. [易飞]一张领料单单身仓库飞了引起的思考
  17. 解决网易云音乐ubuntu客户端播放中无声音
  18. mysql查询结果作为一个表_例题:数据库查询结果作为一个表
  19. Unity UGUI Rect
  20. Frog青蛙的约会【浙江省选2002】(数论)

热门文章

  1. 开发如何有效对接产品的需求
  2. 计算机回收站设置大小,2010年职称计算机考试:“回收站”属性的设置
  3. 安装卡巴斯基客户端提示致命错误(360 Antivirus Software)
  4. 软考什么时候报名?2023年上半年软考报考指南来啦~
  5. node 批量下载百度图片壁纸
  6. WebService调用工具类对Sopa 1.1和Sopa 1.2都可以以及HTTP请求
  7. vivo手机的便签批量导出到huawei手机备忘录
  8. vue.js实现原理 -- 订阅者,发布者模式
  9. 【作业】WLAN无线
  10. 《那些年啊,那些事——一个程序员的奋斗史》——04