JeecgBoot CAS实现单点登录
时间: 2025-02-25 16:48:21 浏览: 81
### JeecgBoot 中使用 CAS 实现单点登录的方法
#### 配置环境准备
为了在 JeecgBoot 中集成 CAS (Central Authentication Service) 单点登录,需先确保已安装并运行了 CAS Server。通常情况下,CAS 可以通过 Maven 或 Docker 方式部署。
对于 JeecgBoot 的前端部分,在 `jeecg-boot/ant-design-jeecg-vue` 目录下完成相应修改[^1];而后端则主要集中在 `jeecg-boot/modules/system` 下进行调整。
#### 后端配置
后端需要引入依赖来支持 CAS 客户端认证机制。编辑项目的 `pom.xml` 文件,加入如下依赖:
```xml
<dependency>
<groupId>org.apereo.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>${cas.version}</version>
</dependency>
```
接着更新 Spring Security 配置类 (`SecurityConfig.java`) 来启用 CAS 登录流程:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.logout()
.permitAll()
.and()
.addFilter(casAuthenticationFilter)
.csrf().disable(); // 如果不需要CSRF保护可以禁用它
casAuthenticationFilter.setServiceProperties(serviceProperties());
casAuthenticationFilter.setAuthenticationManager(authenticationManagerBean());
http.cas().serviceProperties(serviceProperties()).loginUrl("https://your-cas-server/cas/login");
}
private ServiceProperties serviceProperties() {
ServiceProperties sp = new ServiceProperties();
sp.setService("http://localhost:8080/j_spring_cas_security_check"); // 应用程序回调地址
sp.setSendRenew(false);
return sp;
}
}
```
上述代码片段展示了如何设置 CAS 认证过滤器以及指定 CAS 服务器 URL 和应用程序的服务属性[^2]。
#### 前端适配
针对前端 Vue.js 应用,则要处理好与后台交互的身份验证逻辑变化。当用户访问受保护资源时重定向到 CAS 进行身份验证,并在接受到来自 CAS 的票据(Ticket Granting Ticket, TGT)之后再请求服务端接口获取实际数据。
具体来说可以在路由守卫中增加对 ticket 参数的判断,如果存在就调用 `/auth/cas` 接口提交给后端验证,成功后再跳转至目标页面。
```javascript
router.beforeEach((to, from, next) => {
const hasTicket = window.location.href.includes('ticket=');
if (!store.getters.token && to.meta.requiresAuth) {
if(hasTicket){
axios.post('/api/auth/cas', qs.stringify({ ticket }), config).then(response=>{
store.dispatch('LoginByUsername', response.data.result).then(() => {
next({...to});
});
}).catch(error=>{console.log(error)});
}else{
location.replace(`https://your-cas-server/cas/login?service=${encodeURIComponent(window.location.href)}`);
}
} else {
next();
}
})
```
这段 JavaScript 脚本实现了在每次导航前检查是否有有效的 token ,如果没有并且当前路径需要授权的话就会尝试去 CAS 获取凭证[^3]。
#### 测试与调试
完成以上步骤后启动 JeecgBoot 应用和服务端 CAS server 。首次访问任何需要权限控制的功能模块将会被自动导向至 CAS 登录界面输入账号密码完成身份确认过程。一旦登录成功便会返回原网页继续操作而无需再次提供个人信息。
阅读全文
相关推荐
















