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服务通信以获取用户信息。
二、准备工作
-
部署CAS服务: 在集成RuoYi-Vue与CAS之前,确保CA服务已搭建并正常运行。可以使用官方提供的Apache代码进行部署,也可以选择使用Docker。
-
配置RuoYi-Vue后端: 在RuoYi的
application.yml
文件中新增CAS相关配置项:yaml cas: server: http://localhost:8080/cas service-url: http://localhost:8081/api/login
三、后端集成CAS
- 在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<>());
}
} ```
- 在CAS服务器中,需配置允许的服务URLs,确保RuoYi后端的serviceUrl可以成功调用。
四、前端集成CAS
在RuoYi-Vue前端项目中,修改axios请求,新增CAS登录的逻辑。
- 创建一个CAS登录按钮,跳转到后端的CAS登录接口。
```html
```
- 处理回调:
在登录成功后,通过CAS的
callback
处理用户信息以及JWT等安全认证。
五、总结
集成CAS单点登录到RuoYi-Vue前后端分离项目中,能够显著提高用户体验,减少多次登录的麻烦。本文提供了基本的集成思路及示例代码,开发者可以根据具体需求进行进一步完善,保障安全和性能。希望这能为你在项目整合中提供一些帮助与启发。