pom.xml
@@ -41,7 +41,6 @@ <bouncycastle.version>1.72</bouncycastle.version> <!-- 离线IPå°åå®ä½åº --> <ip2region.version>2.7.0</ip2region.version> <justauth.version>1.15.6</justauth.version> <!-- 临æ¶ä¿®å¤ snakeyaml æ¼æ´ --> <snakeyaml.version>1.33</snakeyaml.version> @@ -290,13 +289,6 @@ <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>${snakeyaml.version}</version> </dependency> <!-- ç¬¬ä¸æ¹ææç»å½ --> <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> <version>${justauth.version}</version> </dependency> <!-- å å¯å å¼å ¥ --> ruoyi-admin/pom.xml
@@ -75,21 +75,6 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>me.zhyd.oauth</groupId> <artifactId>JustAuth</artifactId> </dependency> <dependency> <groupId>org.dromara</groupId> <artifactId>ruoyi-common-auth</artifactId> <version>5.1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>credentials-java</artifactId> <version>0.2.4</version> <scope>compile</scope> </dependency> <!-- skywalking æ´å logback --> <!-- <dependency>--> ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
@@ -2,21 +2,9 @@ import cn.dev33.satoken.annotation.SaIgnore; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.constraints.NotBlank; import lombok.RequiredArgsConstructor; import me.zhyd.oauth.cache.AuthDefaultStateCache; import me.zhyd.oauth.cache.AuthStateCache; 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.auth.utils.AuthUtils; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.EmailLoginBody; import org.dromara.common.core.domain.model.LoginBody; @@ -28,8 +16,6 @@ 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.domain.vo.SysUserVo; import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.service.ISysConfigService; import org.dromara.system.service.ISysTenantService; import org.dromara.web.domain.vo.LoginTenantVo; @@ -40,11 +26,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.net.URL; import java.util.HashMap; import java.util.List; import java.util.Map; /** * è®¤è¯ @@ -58,18 +41,10 @@ @RequestMapping("/auth") public class AuthController { private AuthStateCache authStateCache; private final SysLoginService loginService; private final SysRegisterService registerService; private final ISysConfigService configService; private final ISysTenantService tenantService; private final SysUserMapper userMapper; private final Map<String, String> auths = new HashMap<>(); { auths.put("gitee", "{\"clientId\":\"38eaaa1b77b5e064313057a2f5745ce3a9f3e7686d9bd302c7df2f308ef6db81\",\"clientSecret\":\"2e633af8780cb9fe002c4c7291b722db944402e271efb99b062811f52d7da1ff\",\"redirectUri\":\"http://127.0.0.1:8888/social-login?source=gitee\"}"); auths.put("github", "{\"clientId\":\"Iv1.1be0cdcd71aca63b\",\"clientSecret\":\"0d59d28b43152bc8906011624db37b0fed88d154\",\"redirectUri\":\"http://127.0.0.1:80/social-login?source=github\"}"); authStateCache = AuthDefaultStateCache.INSTANCE;// 使ç¨é»è®¤çç¼å } /** * ç»å½æ¹æ³ @@ -139,64 +114,6 @@ loginVo.setToken(token); return R.ok(loginVo); } /** * è®¤è¯ææ * @param source * @throws IOException */ @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 (userMapper.checkAuthUser(userLoding.getUserId(),source) > 0) { return R.fail(source + "å¹³å°è´¦å·å·²ç»ç»å®"); } String obj = auths.get(source); if (StringUtils.isEmpty(obj)) { return R.fail(source + "å¹³å°è´¦å·æä¸æ¯æ"); } JSONObject json = JSONUtil.parseObj(obj); AuthRequest authRequest = AuthUtils.getAuthRequest(source, json.getStr("clientId"), json.getStr("clientSecret"), json.getStr("redirectUri"), authStateCache); String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); return R.ok(authorizeUrl); } /** * @param source * @param callback * @param request * @return */ @SuppressWarnings("unchecked") @GetMapping("/social-login/{source}") public R<String> socialLogin(@PathVariable("source") String source, AuthCallback callback, HttpServletRequest request) throws IOException { String obj = auths.get(source); if (StringUtils.isEmpty(obj)) { return R.fail("ç¬¬ä¸æ¹å¹³å°ç³»ç»ä¸æ¯æææªæä¾æ¥æº"); } JSONObject json = JSONUtil.parseObj(obj); AuthRequest authRequest = AuthUtils.getAuthRequest(source, json.getStr("clientId"), json.getStr("clientSecret"), json.getStr("redirectUri"), authStateCache); AuthResponse<AuthUser> response = authRequest.login(callback); return loginService.socialLogin(source, response, request); } /** * éåºç»å½ ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
@@ -6,15 +6,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthResponse; import me.zhyd.oauth.model.AuthUser; import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.dto.RoleDTO; import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.XcxLoginUser; @@ -32,7 +28,6 @@ import org.dromara.common.tenant.exception.TenantException; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.web.config.properties.CaptchaProperties; import org.dromara.system.domain.SysAuthUser; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysUserVo; @@ -42,7 +37,6 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.IOException; import java.time.Duration; import java.util.Date; import java.util.List; @@ -159,65 +153,6 @@ recordLoginInfo(user.getUserId()); return StpUtil.getTokenValue(); } /** * è®¤è¯ææç»å½ * @param source * @throws IOException */ /** * 社交ç»å½ * @param source ç»å½æ¥æº * @param authUser ææååºå®ä½ * @param request Http请æ±å¯¹è±¡ * @return ç»ä¸ååºå®ä½ * @throws IOException */ public R<String> socialLogin(String source, AuthResponse<AuthUser> authUser, HttpServletRequest request) throws IOException { // 夿ææååºæ¯å¦æå if (!authUser.ok()) { return R.fail("对ä¸èµ·ï¼ææä¿¡æ¯éªè¯ä¸éè¿ï¼è¯·è系管çå"); } AuthUser authUserData = authUser.getData(); // å¤ææ°æ®åºä¸æ¯å¦å·²åå¨è¯¥ç¨æ· SysUserVo user = userMapper.selectAuthUserByUuid(source + authUserData.getUuid()); if (ObjectUtil.isNotNull(user)) { checkTenant(user.getTenantId()); SysUserVo dbUser = loadUserByUsername(user.getTenantId(), user.getUserName()); // ç»å½ LoginHelper.loginByDevice(buildLoginUser(dbUser), DeviceType.auth); recordLogininfor(dbUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId()); return R.ok(StpUtil.getTokenValue()); } else { if (LoginHelper.getUserId() == null) { return R.fail("ææå¤±è´¥ï¼è¯·å ç»å½åç»å®"); } // ç»è£ ææç¨æ·ä¿¡æ¯ SysAuthUser sysAuthUser = new SysAuthUser(); sysAuthUser.setAvatar(authUserData.getAvatar()); sysAuthUser.setUuid(source + authUserData.getUuid()); sysAuthUser.setUserId(LoginHelper.getUserId()); sysAuthUser.setUserName(authUserData.getUsername()); sysAuthUser.setNickName(authUserData.getNickname()); sysAuthUser.setEmail(authUserData.getEmail()); sysAuthUser.setSource(source); sysAuthUser.setCreateTime(new Date().toString()); // æ°ç¨æ·ï¼ç»å®ç¬¬ä¸æ¹è´¦å· userMapper.insertAuthUser(sysAuthUser); SysUserVo lodingData = loadUserByUsername(LoginHelper.getTenantId(), LoginHelper.getUsername()); checkTenant(lodingData.getTenantId()); LoginHelper.loginByDevice(buildLoginUser(lodingData), DeviceType.auth); recordLogininfor(lodingData.getTenantId(), sysAuthUser.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(sysAuthUser.getUserId()); return R.ok(StpUtil.getTokenValue()); } } /** * éåºç»å½ ruoyi-common/pom.xml
@@ -11,7 +11,6 @@ <modules> <module>ruoyi-common-bom</module> <module>ruoyi-common-auth</module> <module>ruoyi-common-core</module> <module>ruoyi-common-doc</module> <module>ruoyi-common-excel</module> ruoyi-common/ruoyi-common-auth/pom.xml
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-auth/src/main/java/org.dromara.common.auth/utils/AuthUtils.java
ÎļþÒÑɾ³ý ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/DeviceType.java
@@ -26,9 +26,7 @@ /** * å°ç¨åºç«¯ */ XCX("xcx"), auth("auth"); XCX("xcx"); private final String device; } ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysAuthUser.java
ÎļþÒÑɾ³ý ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysUserMapper.java
@@ -7,7 +7,6 @@ import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.system.domain.SysAuthUser; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysUserVo; import org.apache.ibatis.annotations.Param; @@ -124,8 +123,8 @@ * @return ç¨æ·å¯¹è±¡ä¿¡æ¯ */ @DataPermission({ @DataColumn(key = "deptName", value = "d.dept_id"),// é¨é¨æé @DataColumn(key = "userName", value = "u.user_id")// ç¨æ·æé @DataColumn(key = "deptName", value = "d.dept_id"), @DataColumn(key = "userName", value = "u.user_id") }) SysUserVo selectUserById(Long userId); @@ -143,44 +142,4 @@ }) int updateById(@Param(Constants.ENTITY) SysUser user); /** * æ ¹æ®ç¨æ·ç¼å·æ¥è¯¢ææå表 * * @param userId ç¨æ·ç¼å· * @return ææå表 */ public List<SysAuthUser> selectAuthUserListByUserId(Long userId); /** * æ ¹æ®uuidæ¥è¯¢ç¨æ·ä¿¡æ¯ * * @param uuid å¯ä¸ä¿¡æ¯ * @return ç»æ */ public SysUserVo selectAuthUserByUuid(String uuid); /** * æ ¡éªsource平尿¯å¦ç»å® * * @param userId ç¨æ·ç¼å· * @param source ç»å®å¹³å° * @return ç»æ */ public int checkAuthUser(@Param("userId") Long userId, @Param("source") String source); /** * æ°å¢ç¬¬ä¸æ¹ææä¿¡æ¯ * * @param authUser ç¨æ·ä¿¡æ¯ * @return ç»æ */ public int insertAuthUser(SysAuthUser authUser); /** * æ ¹æ®ç¼å·å é¤ç¬¬ä¸æ¹ææä¿¡æ¯ * * @param authId ææç¼å· * @return ç»æ */ public int deleteAuthUser(Long authId); } ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysAuthUserMapper.xml
ÎļþÒÑɾ³ý script/AuthSQL/sys_auth_user.sql
ÎļþÒÑɾ³ý