From b0909dbe3ddd7fb06180704c241b4cebabff6665 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期三, 28 六月 2023 14:27:13 +0800 Subject: [PATCH] !379 合并 客户端授权功能 --- ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java | 136 +++++++++++++-------------------------------- 1 files changed, 40 insertions(+), 96 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 8cb96cd..9032d27 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 @@ -4,40 +4,40 @@ 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 lombok.extern.slf4j.Slf4j; 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; import org.dromara.common.core.domain.model.RegisterBody; -import org.dromara.common.core.domain.model.SmsLoginBody; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.MessageUtils; 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.SysClient; import org.dromara.system.domain.bo.SysTenantBo; import org.dromara.system.domain.vo.SysTenantVo; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISocialUserService; +import org.dromara.system.service.ISysClientService; import org.dromara.system.service.ISysConfigService; +import org.dromara.system.service.ISysSocialService; import org.dromara.system.service.ISysTenantService; import org.dromara.web.domain.vo.LoginTenantVo; import org.dromara.web.domain.vo.LoginVo; import org.dromara.web.domain.vo.TenantListVo; +import org.dromara.web.service.IAuthStrategy; import org.dromara.web.service.SysLoginService; import org.dromara.web.service.SysRegisterService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.io.IOException; import java.net.URL; import java.util.List; @@ -46,6 +46,7 @@ * * @author Lion Li */ +@Slf4j @SaIgnore @Validated @RequiredArgsConstructor @@ -58,97 +59,43 @@ private final SysRegisterService registerService; private final ISysConfigService configService; private final ISysTenantService tenantService; - private final ISocialUserService socialUserService; - + private final ISysSocialService socialUserService; + private final ISysClientService clientService; /** * 鐧诲綍鏂规硶 * - * @param body 鐧诲綍淇℃伅 + * @param loginBody 鐧诲綍淇℃伅 * @return 缁撴灉 */ @PostMapping("/login") - public R<LoginVo> login(@Validated @RequestBody LoginBody body) { - LoginVo loginVo = new LoginVo(); - // 鐢熸垚浠ょ墝 - String token = loginService.login( - body.getTenantId(), - body.getUsername(), body.getPassword(), - body.getCode(), body.getUuid()); - loginVo.setToken(token); - return R.ok(loginVo); + public R<LoginVo> login(@Validated @RequestBody LoginBody loginBody) { + // 鎺堟潈绫诲瀷鍜屽鎴风id + String clientId = loginBody.getClientId(); + String grantType = loginBody.getGrantType(); + SysClient client = clientService.queryByClientId(clientId); + // 鏌ヨ涓嶅埌 client 鎴� client 鍐呬笉鍖呭惈 grantType + if (ObjectUtil.isNull(client) || !StringUtils.contains(client.getGrantType(), grantType)) { + log.info("瀹㈡埛绔痠d: {} 璁よ瘉绫诲瀷锛歿} 寮傚父!.", clientId, grantType); + return R.fail(MessageUtils.message("auth.grant.type.error")); + } + // 鏍¢獙绉熸埛 + loginService.checkTenant(loginBody.getTenantId()); + // 鐧诲綍 + return R.ok(IAuthStrategy.login(loginBody, client)); } - - /** - * 鐭俊鐧诲綍 - * - * @param body 鐧诲綍淇℃伅 - * @return 缁撴灉 - */ - @PostMapping("/smsLogin") - public R<LoginVo> smsLogin(@Validated @RequestBody SmsLoginBody body) { - LoginVo loginVo = new LoginVo(); - // 鐢熸垚浠ょ墝 - String token = loginService.smsLogin( - body.getTenantId(), - body.getPhonenumber(), - body.getSmsCode()); - loginVo.setToken(token); - return R.ok(loginVo); - } - - /** - * 閭欢鐧诲綍 - * - * @param body 鐧诲綍淇℃伅 - * @return 缁撴灉 - */ - @PostMapping("/emailLogin") - public R<LoginVo> emailLogin(@Validated @RequestBody EmailLoginBody body) { - LoginVo loginVo = new LoginVo(); - // 鐢熸垚浠ょ墝 - String token = loginService.emailLogin( - body.getTenantId(), - body.getEmail(), - body.getEmailCode()); - loginVo.setToken(token); - return R.ok(loginVo); - } - - /** - * 灏忕▼搴忕櫥褰�(绀轰緥) - * - * @param xcxCode 灏忕▼搴廲ode - * @return 缁撴灉 - */ - @PostMapping("/xcxLogin") - public R<LoginVo> xcxLogin(@NotBlank(message = "{xcx.code.not.blank}") String xcxCode) { - LoginVo loginVo = new LoginVo(); - // 鐢熸垚浠ょ墝 - String token = loginService.xcxLogin(xcxCode); - loginVo.setToken(token); - return R.ok(loginVo); - } - /** * 璁よ瘉鎺堟潈 - * @param source + * + * @param source 鐧诲綍鏉ユ簮 + * @return 缁撴灉 */ @GetMapping("/binding/{source}") - @ResponseBody - public R<LoginVo> authBinding(@PathVariable("source") String source, HttpServletRequest request){ - SysUserVo userLoding = new SysUserVo(); - if (ObjectUtil.isNull(userLoding)) { - return R.fail("鎺堟潈澶辫触锛岃鍏堢櫥褰曞啀缁戝畾"); - } - if (socialUserService.isExistByUserIdAndSource(userLoding.getUserId(),source)) - { - return R.fail(source + "骞冲彴璐﹀彿宸茬粡琚处鍙风粦瀹�"); - } + public R<String> authBinding(@PathVariable("source") String source) { SocialLoginConfigProperties obj = socialProperties.getType().get(source); - if (ObjectUtil.isNull(obj)){ + if (ObjectUtil.isNull(obj)) { return R.fail(source + "骞冲彴璐﹀彿鏆備笉鏀寔"); } AuthRequest authRequest = SocialUtils.getAuthRequest(source, @@ -161,16 +108,16 @@ /** * 绗笁鏂圭櫥褰曞洖璋冧笟鍔″鐞� - * @param source - * @param callback - * @param request - * @return + * + * @param source 鐧诲綍鏉ユ簮 + * @param callback 鎺堟潈鍝嶅簲瀹炰綋 + * @return 缁撴灉 */ @SuppressWarnings("unchecked") - @GetMapping("/social-login/{source}") - public R<String> socialLogin(@PathVariable("source") String source, AuthCallback callback, HttpServletRequest request) throws IOException { + @GetMapping("/social-login") + public R<String> socialLogin(String source, AuthCallback callback) { SocialLoginConfigProperties obj = socialProperties.getType().get(source); - if (ObjectUtil.isNull(obj)){ + if (ObjectUtil.isNull(obj)) { return R.fail(source + "骞冲彴璐﹀彿鏆備笉鏀寔"); } AuthRequest authRequest = SocialUtils.getAuthRequest(source, @@ -178,22 +125,19 @@ obj.getClientSecret(), obj.getRedirectUri()); AuthResponse<AuthUser> response = authRequest.login(callback); - return loginService.socialLogin(source, response, request); + return loginService.socialLogin(source, response); } /** * 鍙栨秷鎺堟潈 - * @param socialId + * + * @param socialId socialId */ @DeleteMapping(value = "/unlock/{socialId}") - public R<Void> unlockSocial(@PathVariable Long socialId) - { + public R<Void> unlockSocial(@PathVariable Long socialId) { Boolean rows = socialUserService.deleteWithValidById(socialId); return rows ? R.ok() : R.fail("鍙栨秷鎺堟潈澶辫触"); } - - - /** -- Gitblit v1.9.3