RuoYi-Vue前后端分离版集成Cas单点登录

在现代Web应用中,单点登录(Single Sign-On, SSO)已成为一种流行的认证机制,它能够让用户在多个应用中只需登录一次,便能无缝访问所有相关应用。而RuoYi-Vue是一款基于Spring Boot + Vue.js的前后端分离的企业级快速开发框架,本文将介绍如何在RuoYi-Vue项目中集成Cas单点登录。

一、CAS单点登录简介

CAS(Central Authentication Service)是一个开源的单点登录协议,用户可以通过一次登录,访问多个相互信任的应用。CAS服务在认证用户后,向客户端应用提供一个服务票据(Service Ticket,ST),客户端应用通过ST与CAS服务通信以获取用户信息。

二、准备工作

  1. 部署CAS服务: 在集成RuoYi-Vue与CAS之前,确保CA服务已搭建并正常运行。可以使用官方提供的Apache代码进行部署,也可以选择使用Docker。

  2. 配置RuoYi-Vue后端: 在RuoYi的application.yml文件中新增CAS相关配置项: yaml cas: server: http://localhost:8080/cas service-url: http://localhost:8081/api/login

三、后端集成CAS

  1. 在RuoYi的后端项目中,新增一个CAS登录控制器。

```java @RestController @RequestMapping("/api/cas") public class CasController {

   @Value("${cas.server}")
   private String casServerUrl;

   @Value("${cas.service-url}")
   private String serviceUrl;

   @GetMapping("/login")
   public void login(HttpServletResponse response) throws IOException {
       String redirectUrl = casServerUrl + "/login?service=" + serviceUrl;
       response.sendRedirect(redirectUrl);
   }

   @GetMapping("/callback")
   public ResponseEntity<?> callback(@RequestParam("ticket") String ticket) {
       // 校验ticket并获取用户信息
       // 这里省略CAS服务票据的验证逻辑
       // 假设我们获取到用户信息
       User user = getUserFromCas(ticket);
       // 登录用户到系统
       SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities()));
       return ResponseEntity.ok(user);
   }

   private User getUserFromCas(String ticket) {
       // 通过CAS服务验证ticket并返回用户信息
       // 实际实现中需要调用CAS的api,这里仅做示例
       return new User("testUser", "testPass", new ArrayList<>());
   }

} ```

  1. 在CAS服务器中,需配置允许的服务URLs,确保RuoYi后端的serviceUrl可以成功调用。

四、前端集成CAS

在RuoYi-Vue前端项目中,修改axios请求,新增CAS登录的逻辑。

  1. 创建一个CAS登录按钮,跳转到后端的CAS登录接口。

```html

```

  1. 处理回调: 在登录成功后,通过CAS的callback处理用户信息以及JWT等安全认证。

五、总结

集成CAS单点登录到RuoYi-Vue前后端分离项目中,能够显著提高用户体验,减少多次登录的麻烦。本文提供了基本的集成思路及示例代码,开发者可以根据具体需求进行进一步完善,保障安全和性能。希望这能为你在项目整合中提供一些帮助与启发。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部