diff --git a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/enums/LoginTypeEnum.java b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/enums/LoginTypeEnum.java index 464d19629..447626882 100644 --- a/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/enums/LoginTypeEnum.java +++ b/pigx-common/pigx-common-core/src/main/java/com/pig4cloud/pigx/common/core/constant/enums/LoginTypeEnum.java @@ -61,7 +61,12 @@ public enum LoginTypeEnum { /** * 开源中国登录 */ - OSC("OSC", "开源中国登录"); + OSC("OSC", "开源中国登录"), + + /** + * CAS 登录 + */ + CAS("CAS", "CAS 登录"); /** * 类型 diff --git a/pigx-upms/pigx-upms-biz/pom.xml b/pigx-upms/pigx-upms-biz/pom.xml index a527e062d..8c7d389c0 100644 --- a/pigx-upms/pigx-upms-biz/pom.xml +++ b/pigx-upms/pigx-upms-biz/pom.xml @@ -33,10 +33,6 @@ pigx 通用用户权限管理系统业务处理模块 - - com.pig4cloud - pigx-common-idempotent - com.oracle.database.jdbc @@ -111,6 +107,12 @@ com.alibaba druid-spring-boot-starter + + + org.jasig.cas.client + cas-client-core + ${cas.sdk.version} + org.springframework.boot diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/CasLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/CasLoginHandler.java new file mode 100644 index 000000000..3264de26f --- /dev/null +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/CasLoginHandler.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.admin.handler; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.pig4cloud.pigx.admin.api.dto.UserInfo; +import com.pig4cloud.pigx.admin.api.entity.SysSocialDetails; +import com.pig4cloud.pigx.admin.api.entity.SysUser; +import com.pig4cloud.pigx.admin.mapper.SysSocialDetailsMapper; +import com.pig4cloud.pigx.admin.service.SysUserService; +import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum; +import lombok.AllArgsConstructor; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.jasig.cas.client.validation.Assertion; +import org.jasig.cas.client.validation.Cas30ProxyTicketValidator; +import org.springframework.stereotype.Component; + +/** + * @author lengleng + * @date 2018/11/18 + */ +@Slf4j +@Component("CAS") +@AllArgsConstructor +public class CasLoginHandler extends AbstractLoginHandler { + + private final SysSocialDetailsMapper sysSocialDetailsMapper; + + private final SysUserService sysUserService; + + /** + * cas 回到的ticket + *

+ * 通过ticket 调用CAS获取唯一标识 + * @param ticket + * @return + */ + @Override + @SneakyThrows + public String identify(String ticket) { + SysSocialDetails condition = new SysSocialDetails(); + condition.setType(LoginTypeEnum.CAS.getType()); + SysSocialDetails socialDetails = sysSocialDetailsMapper.selectOne(new QueryWrapper<>(condition)); + Cas30ProxyTicketValidator cas30ProxyTicketValidator = new Cas30ProxyTicketValidator(socialDetails.getRemark()); + Assertion validate = cas30ProxyTicketValidator.validate(ticket, socialDetails.getRedirectUrl()); + return validate.getPrincipal().getName(); + } + + /** + * openId 获取用户信息 + * @param openId + * @return + */ + @Override + public UserInfo info(String username) { + SysUser user = sysUserService.getOne(Wrappers.query().lambda().eq(SysUser::getUsername, username)); + + if (user == null) { + log.info("CAS 不存在用户:{}", username); + return null; + } + return sysUserService.findUserInfo(user); + } + +} diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/LoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/LoginHandler.java index 8c42c2b6a..51dfd8703 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/LoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/LoginHandler.java @@ -62,6 +62,8 @@ public interface LoginHandler { * @param identify 渠道返回唯一标识 * @return */ - Boolean bind(SysUser user, String identify); + default Boolean bind(SysUser user, String identify) { + return false; + } } diff --git a/pom.xml b/pom.xml index 660721c1a..05314db93 100644 --- a/pom.xml +++ b/pom.xml @@ -45,6 +45,7 @@ 2.5.5 5.7.18 1.2.7 + 3.6.4 3.0.0 2.0.9 1.7