springboot集成cas客户端

3 篇文章 0 订阅

Background

  • 单点登录SSO(Single Sign ON),指在多个应用系统中,只需登录一次,即可在多个应用系统之间共享登录。
  • 统一身份认证CAS(Central Authentication Service)是SSO的开源实现,利用CAS实现SSO可以很大程度的降低开发和维护的成本。
  • CAS由CAS Server和CAS Client两部分组成。
  • CAS三个重要术语:TGT(Ticket Granting Ticket)、TGC(Ticket Granting Cookie)和ST(Service Ticket)。

在这里插入图片描述

1、所用软件版本

软件名称版本
jdk1.8.0_202
maven3.6.3
cas5.3.16

CAS项目托管在Github上,克隆或者下载源码,进行编译以后即可安装。但是对于一般用户来说,官方建议的安装方式是使用WAR Overlay方法来安装编译好的war包。WAR Overlay是一种对抗重复性的代码和资源的策略。它会下载一个由项目本身提供的预构建的普通CAS Web应用程序服务器,而不是下载CAS代码库并从源代码开始构建。WAR Overlay在构建时,构建安装工具首先会尝试下载官方提供的二进制安装包。然后,该工具将查找在同一项目目录中可用的配置文件和设置,并将它们合并到下载的工件中,以生成一个完整的Web存档(cas.war)。

2、cas-server安装

  • 生成的cas.war包在target目录下
  • 访问地址:https://localhost:8443/cas(localhost换成cas所在的服务器IP)
  • 默认用户名密码:casuser=Mellon
git clone -b 5.3 https://github.com/apereo/cas-overlay-template.git
mvn clean compile package
java -jar target/cas.war

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这样,中央身份认证服务就安装好了!

3、springboot集成cas-client

  • maven依赖
<dependency>
    <groupId>net.unicon.cas</groupId>
    <artifactId>cas-client-autoconfig-support</artifactId>
    <version>2.3.0-GA</version>
</dependency>
  • yml配置
server:
  port: 8888
  servlet:
    context-path: /sso-client
cas:
  #后端服务地址
  client-host-url: http://127.0.0.1:8888
  #cas认证中心地址
  server-url-prefix: https://monkey:8443/cas
  #cas认证中心登录地址
  server-login-url: https://monkey:8443/cas/login
  validation-type: cas
  • 启动类加上@EnableCasClient启用CAS
    在这里插入图片描述
  • 退出示例
package cas.client.sso.controller;

import lombok.extern.slf4j.Slf4j;
import org.jasig.cas.client.authentication.AttributePrincipal;
import org.jasig.cas.client.util.AbstractCasFilter;
import org.jasig.cas.client.validation.Assertion;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @ClassName: TestController
 * @Description: TestController
 * @Author W
 * @Date 2020/12/23 17:32
 * @Version 1.0
 */
@Slf4j
@Controller
public class TestController {

    @Value(value = "${cas.server-url-prefix}")
    private String serverUrlPrefix = "";

    @Value(value = "${cas.client-host-url}")
    private String clientHostUrl = "";

    // /sso-client/hello
    @GetMapping("/hello")
    @ResponseBody
    public String hello() {
        return "word";
    }

    @GetMapping("user")
    @ResponseBody
    public String user(HttpServletRequest request) {
        Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);
        String loginName = null;
        if (assertion != null) {
            AttributePrincipal principal = assertion.getPrincipal();
            loginName = principal.getName();
            log.info("访问者: {}", loginName);
        }
        return "访问者:" + loginName;
    }

    @RequestMapping("/logout")
    public String logout(HttpSession session) {
        session.invalidate();
        return "redirect:" + serverUrlPrefix + "/logout?service=" + clientHostUrl + "/sso-client/user";
    }
}
  • 访问:http://127.0.0.1:8888/sso-client/hello遇到问题未认证授权的服务
    在这里插入图片描述
  • 解决方案

【第一步】直接vim cas.jar修改 cas.jar/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json
原来的截图如下:
图片2

改成如下所示(serviceId中添加了http):

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|http|imaps)://.*",
  "name" : "wlf-test",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

【第二步】修改 /etc/cas/config/cas.properties添加如下一行:

# 启用加载JSON配置文件
 cas.serviceRegistry.initFromJson=true

图片3

重启cas客户端和服务端恢复正常
在这里插入图片描述

图片3

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WaiSaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值