From 8573ffdd7f2da009c9adad9f5eb9f50810c2f184 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期日, 25 六月 2023 22:19:27 +0800 Subject: [PATCH] update satoken 1.34.0 => 1.35.0.RC 优化过期配置 支持多端token自定义有效期 --- ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java | 96 +++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 83 insertions(+), 13 deletions(-) diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 9defb83..51160aa 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -2,6 +2,15 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.constraints.NotBlank; +import lombok.RequiredArgsConstructor; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.model.AuthUser; +import me.zhyd.oauth.request.AuthRequest; +import me.zhyd.oauth.utils.AuthStateUtils; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.EmailLoginBody; import org.dromara.common.core.domain.model.LoginBody; @@ -10,9 +19,13 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.social.config.properties.SocialLoginConfigProperties; +import org.dromara.common.social.config.properties.SocialProperties; +import org.dromara.common.social.utils.SocialUtils; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.vo.SysTenantVo; +import org.dromara.system.service.ISysSocialService; import org.dromara.system.service.ISysConfigService; import org.dromara.system.service.ISysTenantService; import org.dromara.web.domain.vo.LoginTenantVo; @@ -20,9 +33,6 @@ import org.dromara.web.domain.vo.TenantListVo; import org.dromara.web.service.SysLoginService; import org.dromara.web.service.SysRegisterService; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.constraints.NotBlank; -import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -41,10 +51,13 @@ @RequestMapping("/auth") public class AuthController { + private final SocialProperties socialProperties; private final SysLoginService loginService; private final SysRegisterService registerService; private final ISysConfigService configService; private final ISysTenantService tenantService; + private final ISysSocialService socialUserService; + /** * 鐧诲綍鏂规硶 @@ -74,8 +87,10 @@ public R<LoginVo> smsLogin(@Validated @RequestBody SmsLoginBody body) { LoginVo loginVo = new LoginVo(); // 鐢熸垚浠ょ墝 - String token = - loginService.smsLogin(body.getTenantId(), body.getPhonenumber(), body.getSmsCode()); + String token = loginService.smsLogin( + body.getTenantId(), + body.getPhonenumber(), + body.getSmsCode()); loginVo.setToken(token); return R.ok(loginVo); } @@ -90,8 +105,10 @@ public R<LoginVo> emailLogin(@Validated @RequestBody EmailLoginBody body) { LoginVo loginVo = new LoginVo(); // 鐢熸垚浠ょ墝 - String token = - loginService.emailLogin(body.getTenantId(), body.getEmail(), body.getEmailCode()); + String token = loginService.emailLogin( + body.getTenantId(), + body.getEmail(), + body.getEmailCode()); loginVo.setToken(token); return R.ok(loginVo); } @@ -110,6 +127,61 @@ loginVo.setToken(token); return R.ok(loginVo); } + + + /** + * 璁よ瘉鎺堟潈 + * + * @param source 鐧诲綍鏉ユ簮 + * @return 缁撴灉 + */ + @GetMapping("/binding/{source}") + public R<String> authBinding(@PathVariable("source") String source) { + SocialLoginConfigProperties obj = socialProperties.getType().get(source); + if (ObjectUtil.isNull(obj)) { + return R.fail(source + "骞冲彴璐﹀彿鏆備笉鏀寔"); + } + AuthRequest authRequest = SocialUtils.getAuthRequest(source, + obj.getClientId(), + obj.getClientSecret(), + obj.getRedirectUri()); + String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); + return R.ok(authorizeUrl); + } + + /** + * 绗笁鏂圭櫥褰曞洖璋冧笟鍔″鐞� + * + * @param source 鐧诲綍鏉ユ簮 + * @param callback 鎺堟潈鍝嶅簲瀹炰綋 + * @return 缁撴灉 + */ + @SuppressWarnings("unchecked") + @GetMapping("/social-login") + public R<String> socialLogin(String source, AuthCallback callback) { + SocialLoginConfigProperties obj = socialProperties.getType().get(source); + if (ObjectUtil.isNull(obj)) { + return R.fail(source + "骞冲彴璐﹀彿鏆備笉鏀寔"); + } + AuthRequest authRequest = SocialUtils.getAuthRequest(source, + obj.getClientId(), + obj.getClientSecret(), + obj.getRedirectUri()); + AuthResponse<AuthUser> response = authRequest.login(callback); + return loginService.socialLogin(source, response); + } + + /** + * 鍙栨秷鎺堟潈 + * + * @param socialId socialId + */ + @DeleteMapping(value = "/unlock/{socialId}") + public R<Void> unlockSocial(@PathVariable Long socialId) { + Boolean rows = socialUserService.deleteWithValidById(socialId); + return rows ? R.ok() : R.fail("鍙栨秷鎺堟潈澶辫触"); + } + /** * 閫�鍑虹櫥褰� @@ -142,19 +214,17 @@ List<SysTenantVo> tenantList = tenantService.queryList(new SysTenantBo()); List<TenantListVo> voList = MapstructUtils.convert(tenantList, TenantListVo.class); // 鑾峰彇鍩熷悕 - String host = ""; + String host; String referer = request.getHeader("referer"); if (StringUtils.isNotBlank(referer)) { - //杩欓噷浠巖eferer涓彇鍊兼槸涓轰簡鏈湴浣跨敤hosts娣诲姞铏氭嫙鍩熷悕锛屾柟渚挎湰鍦扮幆澧冭皟璇� + // 杩欓噷浠巖eferer涓彇鍊兼槸涓轰簡鏈湴浣跨敤hosts娣诲姞铏氭嫙鍩熷悕锛屾柟渚挎湰鍦扮幆澧冭皟璇� host = referer.split("//")[1].split("/")[0]; } else { host = new URL(request.getRequestURL().toString()).getHost(); } // 鏍规嵁鍩熷悕杩涜绛涢�� - String finalHost = host; - List<TenantListVo> list = - StreamUtils.filter(voList, vo -> StringUtils.equals(vo.getDomain(), - finalHost)); + List<TenantListVo> list = StreamUtils.filter(voList, vo -> + StringUtils.equals(vo.getDomain(), host)); // 杩斿洖瀵硅薄 LoginTenantVo vo = new LoginTenantVo(); vo.setVoList(CollUtil.isNotEmpty(list) ? list : voList); -- Gitblit v1.9.3