From 2f3e873980d6b907080bc5a0e936a101b8213e41 Mon Sep 17 00:00:00 2001 From: Github_lizhw <171332584@qq.com> Date: Mon, 21 Oct 2024 23:07:11 +0800 Subject: [PATCH] sso service --- ruoyi-admin/pom.xml | 36 ++++ .../dromara/web}/config/SaTokenConfig.java | 2 +- .../src/main/resources/application.yml | 2 + ruoyi-common/ruoyi-common-satoken/pom.xml | 11 +- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../src/main/resources/common-satoken.yml | 4 +- ruoyi-modules/ruoyi-sso-server/pom.xml | 6 +- .../java/com/pj/SaSsoServerApplication.java | 4 +- .../main/java/com/pj/config/CorsConfig.java | 47 ++++ .../GlobalExceptionHandler.java | 10 +- .../java/com/pj/config/SaTokenConfig.java | 44 ++++ .../{home => controller}/HomeController.java | 2 +- .../SsoServerController.java | 47 +--- .../src/main/java/com/pj/h5/H5Controller.java | 44 ---- .../main/java/com/pj/helper/LoginHelper.java | 202 ++++++++++++++++++ .../pj/service/impl/PasswordAuthStrategy.java | 2 +- .../src/main/resources/application.yml | 5 +- .../src/main/resources/static/sa-res/login.js | 44 +--- ruoyi-modules/ruoyi-system-saas/pom.xml | 23 -- ruoyi-modules/ruoyi-system/pom.xml | 23 -- 20 files changed, 376 insertions(+), 183 deletions(-) rename {ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken => ruoyi-admin/src/main/java/org/dromara/web}/config/SaTokenConfig.java (97%) create mode 100644 ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/CorsConfig.java rename ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/{sso => config}/GlobalExceptionHandler.java (80%) create mode 100644 ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/SaTokenConfig.java rename ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/{home => controller}/HomeController.java (98%) rename ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/{sso => controller}/SsoServerController.java (64%) delete mode 100644 ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/h5/H5Controller.java create mode 100644 ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/helper/LoginHelper.java diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 7f9f4bd29..900ab9256 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -16,6 +16,42 @@ + + org.springframework.boot + spring-boot-starter-actuator + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + org.springframework.cloud + spring-cloud-starter-loadbalancer + + + com.alibaba.nacos + logback-adapter + 1.0.0 + + + + org.springframework.cloud + spring-cloud-starter-bootstrap + + + diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java b/ruoyi-admin/src/main/java/org/dromara/web/config/SaTokenConfig.java similarity index 97% rename from ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java rename to ruoyi-admin/src/main/java/org/dromara/web/config/SaTokenConfig.java index 61c6b9acc..bf289a043 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/config/SaTokenConfig.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/config/SaTokenConfig.java @@ -1,4 +1,4 @@ -package org.dromara.common.satoken.config; +package org.dromara.web.config; import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.jwt.StpLogicJwtForSimple; diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index c72257f2e..ff0fbf865 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -92,6 +92,8 @@ sa-token: is-share: false # jwt秘钥 jwt-secret-key: abcdefghijklmnopqrstuvwxyz + # token前缀 + token-prefix: "Bearer" # security配置 security: diff --git a/ruoyi-common/ruoyi-common-satoken/pom.xml b/ruoyi-common/ruoyi-common-satoken/pom.xml index 4df7d4ded..ed16fe796 100644 --- a/ruoyi-common/ruoyi-common-satoken/pom.xml +++ b/ruoyi-common/ruoyi-common-satoken/pom.xml @@ -40,7 +40,16 @@ com.github.ben-manes.caffeine caffeine - + + + cn.dev33 + sa-token-redis-jackson + 1.38.0 + + + org.apache.commons + commons-pool2 + diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 6dd284fb2..e69de29bb 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +0,0 @@ -org.dromara.common.satoken.config.SaTokenConfig diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml b/ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml index 95e1b41b2..c7baaa007 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml +++ b/ruoyi-common/ruoyi-common-satoken/src/main/resources/common-satoken.yml @@ -4,10 +4,8 @@ sa-token: # 允许动态设置 token 有效期 dynamic-active-timeout: true # 允许从 请求参数 读取 token - is-read-body: true + is-read-body: false # 允许从 header 读取 token is-read-header: true # 关闭 cookie 鉴权 从根源杜绝 csrf 漏洞风险 is-read-cookie: false - # token前缀 - token-prefix: "Bearer" diff --git a/ruoyi-modules/ruoyi-sso-server/pom.xml b/ruoyi-modules/ruoyi-sso-server/pom.xml index 0577cc336..e385b6346 100644 --- a/ruoyi-modules/ruoyi-sso-server/pom.xml +++ b/ruoyi-modules/ruoyi-sso-server/pom.xml @@ -87,6 +87,6 @@ 1.38.0 - - - \ No newline at end of file + + + diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/SaSsoServerApplication.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/SaSsoServerApplication.java index f8559239d..b0f29bb52 100644 --- a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/SaSsoServerApplication.java +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/SaSsoServerApplication.java @@ -17,5 +17,5 @@ public class SaSsoServerApplication { System.out.println("测试前需要根据官网文档修改hosts文件,测试账号密码:sa / 123456"); System.out.println(); } - -} \ No newline at end of file + +} diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/CorsConfig.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/CorsConfig.java new file mode 100644 index 000000000..e6789c5b8 --- /dev/null +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/CorsConfig.java @@ -0,0 +1,47 @@ +package com.pj.config; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * 跨域过滤器 + * + * @author lizhw + */ +@Configuration +public class CorsConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOriginPatterns("*") + .allowedMethods("GET", "POST", "PUT", "DELETE") + .allowedHeaders("*") + .allowCredentials(true) + .maxAge(3600) + .exposedHeaders("Authorization"); + } + + @Bean + public FilterRegistrationBean corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + CorsConfiguration config = new CorsConfiguration(); + config.addAllowedOriginPattern("*"); + config.addAllowedHeader("*"); + config.addAllowedMethod("*"); + config.setAllowCredentials(true); + config.setMaxAge(3600L); + source.registerCorsConfiguration("/**", config); + FilterRegistrationBean bean = new FilterRegistrationBean<>(new CorsFilter(source)); + bean.setOrder(Ordered.HIGHEST_PRECEDENCE); + return bean; + } + +} diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/sso/GlobalExceptionHandler.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/GlobalExceptionHandler.java similarity index 80% rename from ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/sso/GlobalExceptionHandler.java rename to ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/GlobalExceptionHandler.java index 12e3ae848..a80c06c68 100644 --- a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/sso/GlobalExceptionHandler.java +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/GlobalExceptionHandler.java @@ -1,4 +1,4 @@ -package com.pj.sso; +package com.pj.config; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @@ -6,18 +6,18 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; import cn.dev33.satoken.util.SaResult; /** - * 全局异常处理 + * 全局异常处理 * @author click33 * */ @RestControllerAdvice public class GlobalExceptionHandler { - // 全局异常拦截 + // 全局异常拦截 @ExceptionHandler public SaResult handlerException(Exception e) { - e.printStackTrace(); + e.printStackTrace(); return SaResult.error(e.getMessage()); } - + } diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/SaTokenConfig.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/SaTokenConfig.java new file mode 100644 index 000000000..02884e74b --- /dev/null +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/config/SaTokenConfig.java @@ -0,0 +1,44 @@ +package com.pj.config; + +import cn.dev33.satoken.jwt.StpLogicJwtForSimple; +import cn.dev33.satoken.stp.StpInterface; +import cn.dev33.satoken.stp.StpLogic; +import org.dromara.common.core.factory.YmlPropertySourceFactory; +import org.dromara.common.satoken.core.service.SaPermissionImpl; +import org.dromara.common.satoken.handler.SaTokenExceptionHandler; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.PropertySource; + +/** + * sa-token 配置 + * + * @author Lion Li + */ +@AutoConfiguration +@PropertySource(value = "classpath:common-satoken.yml", factory = YmlPropertySourceFactory.class) +public class SaTokenConfig { + + @Bean + public StpLogic getStpLogicJwt() { + // Sa-Token 整合 jwt (简单模式) + return new StpLogicJwtForSimple(); + } + + /** + * 权限接口实现(使用bean注入方便用户替换) + */ + @Bean + public StpInterface stpInterface() { + return new SaPermissionImpl(); + } + + /** + * 异常处理器 + */ + @Bean + public SaTokenExceptionHandler saTokenExceptionHandler() { + return new SaTokenExceptionHandler(); + } + +} diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/home/HomeController.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/controller/HomeController.java similarity index 98% rename from ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/home/HomeController.java rename to ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/controller/HomeController.java index 1be7c1d23..2b346ce6b 100644 --- a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/home/HomeController.java +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/controller/HomeController.java @@ -1,4 +1,4 @@ -package com.pj.home; +package com.pj.controller; import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.stp.StpUtil; diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/sso/SsoServerController.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/controller/SsoServerController.java similarity index 64% rename from ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/sso/SsoServerController.java rename to ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/controller/SsoServerController.java index 9c4c1773d..ae786e4a8 100644 --- a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/sso/SsoServerController.java +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/controller/SsoServerController.java @@ -1,13 +1,9 @@ -package com.pj.sso; +package com.pj.controller; -import cn.dev33.satoken.context.SaHolder; -import cn.dev33.satoken.context.model.SaRequest; -import cn.dev33.satoken.sign.SaSignUtil; import cn.dev33.satoken.sso.config.SaSsoServerConfig; import cn.dev33.satoken.sso.processor.SaSsoServerProcessor; import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.util.SaResult; -import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.pj.model.vo.LoginVo; import com.pj.model.vo.SysClientVo; @@ -35,16 +31,6 @@ public class SsoServerController { */ @RequestMapping("/sso/*") public Object ssoRequest() { - // 如果登录时没有提供redirect参数,则进入平台中心首页 /home,而不是重定向到 client 端 - SaRequest req = SaHolder.getRequest(); - if(req.isPath("/sso/auth") && !req.hasParam("redirect") && StpUtil.isLogin()) { - return SaHolder.getResponse().redirect("/home"); - } - - if(req.isPath("/sso/isLogin")) { - return SaResult.data(StpUtil.isLogin()); - } - return SaSsoServerProcessor.instance.dister(); } @@ -61,7 +47,6 @@ public class SsoServerController { ssoServer.doLoginHandle = (name, pwd) -> { // 此处仅做模拟登录,真实环境应该查询数据进行登录 if("sa".equals(name) && "123456".equals(pwd)) { - StpUtil.login(10001); PasswordLoginBody body = new PasswordLoginBody(); body.setUsername("sa"); body.setPassword("123456"); @@ -71,12 +56,16 @@ public class SsoServerController { body.setCode("code1"); body.setUuid("qweqw"); - - SysClientVo client = new SysClientVo(); client.setId(1L); - client.setTimeout(10000L); - client.setActiveTimeout(1000000L); + client.setClientId("ClientId1"); + client.setClientKey("setClientKey"); + client.setClientSecret("setClientSecret"); + client.setGrantType("password"); + client.setDeviceType("pc"); + client.setActiveTimeout(604800L); + client.setTimeout(604800L); + client.setStatus("0"); LoginVo loginVo = IAuthStrategy.login(JSONUtil.toJsonStr(body), client, body.getGrantType()); @@ -87,22 +76,4 @@ public class SsoServerController { } - // 示例:获取数据接口(用于在模式三下,为 client 端开放拉取数据的接口) - @RequestMapping("/sso/getData") - public SaResult getData(String apiType, String loginId) { - System.out.println("---------------- 获取数据 ----------------"); - System.out.println("apiType=" + apiType); - System.out.println("loginId=" + loginId); - - // 校验签名:只有拥有正确秘钥发起的请求才能通过校验 - SaSignUtil.checkRequest(SaHolder.getRequest()); - - // 自定义返回结果(模拟) - return SaResult.ok() - .set("id", loginId) - .set("name", "LinXiaoYu") - .set("sex", "女") - .set("age", 18); - } - } diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/h5/H5Controller.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/h5/H5Controller.java deleted file mode 100644 index 4c54e8fd0..000000000 --- a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/h5/H5Controller.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.pj.h5; - -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import cn.dev33.satoken.sso.util.SaSsoConsts; -import cn.dev33.satoken.sso.template.SaSsoUtil; -import cn.dev33.satoken.stp.StpUtil; -import cn.dev33.satoken.util.SaFoxUtil; -import cn.dev33.satoken.util.SaResult; - -/** - * 前后台分离架构下集成SSO所需的代码 (SSO-Server端) - *

(注:如果不需要前后端分离架构下集成SSO,可删除此包下所有代码)

- * @author click33 - * - */ -@RestController -public class H5Controller { - - /** - * 获取 redirectUrl - */ - @RequestMapping("/sso/getRedirectUrl") - public SaResult getRedirectUrl(String redirect, String mode, String client) { - // 未登录情况下,返回 code=401 - if(!StpUtil.isLogin()) { - return SaResult.code(401); - } - // 已登录情况下,构建 redirectUrl - redirect = SaFoxUtil.decoderUrl(redirect); - if(SaSsoConsts.MODE_SIMPLE.equals(mode)) { - // 模式一 - SaSsoUtil.checkRedirectUrl(redirect); - return SaResult.data(redirect); - } else { - // 模式二或模式三 - String redirectUrl = SaSsoUtil.buildRedirectUrl(StpUtil.getLoginId(), client, redirect); - return SaResult.data(redirectUrl); - } - } - -} diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/helper/LoginHelper.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/helper/LoginHelper.java new file mode 100644 index 000000000..f1339facd --- /dev/null +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/helper/LoginHelper.java @@ -0,0 +1,202 @@ +//package com.pj.utils; +// +//import cn.dev33.satoken.session.SaSession; +//import cn.dev33.satoken.stp.SaLoginModel; +//import cn.dev33.satoken.stp.StpUtil; +//import cn.hutool.core.collection.CollUtil; +//import cn.hutool.core.convert.Convert; +//import cn.hutool.core.util.ObjectUtil; +//import lombok.AccessLevel; +//import lombok.NoArgsConstructor; +//import org.dromara.common.core.constant.TenantConstants; +//import org.dromara.common.core.constant.UserConstants; +//import org.dromara.common.core.domain.model.LoginUser; +//import org.dromara.common.core.enums.UserType; +// +//import java.util.Set; +// +///** +// * 登录鉴权助手 +// *

+// * user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app +// * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios +// * 可以组成 用户类型与设备类型多对多的 权限灵活控制 +// *

+// * 多用户体系 针对 多种用户类型 但权限控制不一致 +// * 可以组成 多用户类型表与多设备类型 分别控制权限 +// * +// * @author Lion Li +// */ +//@NoArgsConstructor(access = AccessLevel.PRIVATE) +//public class LoginHelper { +// +// public static final String LOGIN_USER_KEY = "loginUser"; +// public static final String TENANT_KEY = "tenantId"; +// public static final String USER_KEY = "userId"; +// public static final String USER_NAME_KEY = "userName"; +// public static final String DEPT_KEY = "deptId"; +// public static final String DEPT_NAME_KEY = "deptName"; +// public static final String DEPT_CATEGORY_KEY = "deptCategory"; +// public static final String CLIENT_KEY = "clientid"; +// +// /** +// * 登录系统 基于 设备类型 +// * 针对相同用户体系不同设备 +// * +// * @param loginUser 登录用户信息 +// * @param model 配置参数 +// */ +// public static void login(LoginUser loginUser, SaLoginModel model) { +// model = ObjectUtil.defaultIfNull(model, new SaLoginModel()); +// StpUtil.login(loginUser.getLoginId(), +// model.setExtra(TENANT_KEY, loginUser.getTenantId()) +// .setExtra(USER_KEY, loginUser.getUserId()) +// .setExtra(USER_NAME_KEY, loginUser.getUsername()) +// .setExtra(DEPT_KEY, loginUser.getDeptId()) +// .setExtra(DEPT_NAME_KEY, loginUser.getDeptName()) +// .setExtra(DEPT_CATEGORY_KEY, loginUser.getDeptCategory()) +// ); +// StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); +// } +// +// /** +// * 获取用户(多级缓存) +// */ +// public static LoginUser getLoginUser() { +// SaSession session = StpUtil.getTokenSession(); +// if (ObjectUtil.isNull(session)) { +// return null; +// } +// return (LoginUser) session.get(LOGIN_USER_KEY); +// } +// +// /** +// * 获取用户基于token +// */ +// public static LoginUser getLoginUser(String token) { +// SaSession session = StpUtil.getTokenSessionByToken(token); +// if (ObjectUtil.isNull(session)) { +// return null; +// } +// return (LoginUser) session.get(LOGIN_USER_KEY); +// } +// +// /** +// * 获取用户id +// */ +// public static Long getUserId() { +// return Convert.toLong(getExtra(USER_KEY)); +// } +// +// /** +// * 获取用户账户 +// */ +// public static String getUsername() { +// return Convert.toStr(getExtra(USER_NAME_KEY)); +// } +// +// /** +// * 获取租户ID +// */ +// public static String getTenantId() { +// return Convert.toStr(getExtra(TENANT_KEY)); +// } +// +// /** +// * 获取部门ID +// */ +// public static Long getDeptId() { +// return Convert.toLong(getExtra(DEPT_KEY)); +// } +// +// /** +// * 获取部门名 +// */ +// public static String getDeptName() { +// return Convert.toStr(getExtra(DEPT_NAME_KEY)); +// } +// +// /** +// * 获取部门类别编码 +// */ +// public static String getDeptCategory() { +// return Convert.toStr(getExtra(DEPT_CATEGORY_KEY)); +// } +// +// /** +// * 获取当前 Token 的扩展信息 +// * +// * @param key 键值 +// * @return 对应的扩展数据 +// */ +// private static Object getExtra(String key) { +// try { +// return StpUtil.getExtra(key); +// } catch (Exception e) { +// return null; +// } +// } +// +// /** +// * 获取用户类型 +// */ +// public static UserType getUserType() { +// String loginType = StpUtil.getLoginIdAsString(); +// return UserType.getUserType(loginType); +// } +// +// /** +// * 是否为超级管理员 +// * +// * @param userId 用户ID +// * @return 结果 +// */ +// public static boolean isSuperAdmin(Long userId) { +// return UserConstants.SUPER_ADMIN_ID.equals(userId); +// } +// +// /** +// * 是否为超级管理员 +// * +// * @return 结果 +// */ +// public static boolean isSuperAdmin() { +// return isSuperAdmin(getUserId()); +// } +// +// /** +// * 是否为租户管理员 +// * +// * @param rolePermission 角色权限标识组 +// * @return 结果 +// */ +// public static boolean isTenantAdmin(Set rolePermission) { +// if (CollUtil.isEmpty(rolePermission)) { +// return false; +// } +// return rolePermission.contains(TenantConstants.TENANT_ADMIN_ROLE_KEY); +// } +// +// /** +// * 是否为租户管理员 +// * +// * @return 结果 +// */ +// public static boolean isTenantAdmin() { +// return Convert.toBool(isTenantAdmin(getLoginUser().getRolePermission())); +// } +// +// /** +// * 检查当前用户是否已登录 +// * +// * @return 结果 +// */ +// public static boolean isLogin() { +// try { +// return getLoginUser() != null; +// } catch (Exception e) { +// return false; +// } +// } +// +//} diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/service/impl/PasswordAuthStrategy.java b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/service/impl/PasswordAuthStrategy.java index 6b5280426..7fdab746d 100644 --- a/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/service/impl/PasswordAuthStrategy.java +++ b/ruoyi-modules/ruoyi-sso-server/src/main/java/com/pj/service/impl/PasswordAuthStrategy.java @@ -77,7 +77,7 @@ public class PasswordAuthStrategy implements IAuthStrategy { loginUser.setDeptId(2L); loginUser.setUsername("测试用户登录名"); loginUser.setNickname("测试用户名称"); - loginUser.setUserType("用户类型1"); + loginUser.setUserType("app_user"); return loginUser; } diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml b/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml index 6dd14e176..0d2a009ff 100644 --- a/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml +++ b/ruoyi-modules/ruoyi-sso-server/src/main/resources/application.yml @@ -1,6 +1,6 @@ # 端口 server: - port: 9002 + port: 9000 spring: cloud: @@ -42,6 +42,8 @@ spring: sa-token: # token名称 (同时也是cookie名称) token-name: Authorization + # cookie写入 + is-read-cookie: true # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) is-concurrent: true # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) @@ -74,4 +76,3 @@ security: - /*/api-docs - /*/api-docs/** - \ No newline at end of file diff --git a/ruoyi-modules/ruoyi-sso-server/src/main/resources/static/sa-res/login.js b/ruoyi-modules/ruoyi-sso-server/src/main/resources/static/sa-res/login.js index 80a0acd45..c14744ef8 100644 --- a/ruoyi-modules/ruoyi-sso-server/src/main/resources/static/sa-res/login.js +++ b/ruoyi-modules/ruoyi-sso-server/src/main/resources/static/sa-res/login.js @@ -1,15 +1,11 @@ -// sa +// sa var sa = {}; -sa.setToken = function (token) { - localStorage.setItem("Authorization", token) -}; -sa.getToken = function () { - return "Bearer " + localStorage.getItem("Authorization") -}; - -$.ajaxSettings.beforeSend = function (xhr, request) { - xhr.setRequestHeader("Authorization", sa.getToken()); +function setCookie(cname, cvalue, exdays) { + var d = new Date(); + d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); + var expires = "expires=" + d.toGMTString(); + document.cookie = cname + "=" + cvalue + "; " + expires; } // 打开loading @@ -24,28 +20,6 @@ sa.hideLoading = function () { }; -$.ajax({ - url: "sso/isLogin", - type: "get", - success: function (res) { - debugger - console.log('返回数据:', res); - sa.hideLoading(); - if (res.code === 200 && res.data) { - layer.msg('登录成功', {anim: 0, icon: 6}); - } else { - layer.msg("检验未登录!", {anim: 6, icon: 2}); - } - }, - error: function (xhr, type, errorThrown) { - sa.hideLoading(); - if (xhr.status == 0) { - return layer.alert('无法连接到服务器,请检查网络'); - } - return layer.alert("异常:" + JSON.stringify(xhr)); - } -}); - // ----------------------------------- 登录事件 ----------------------------------- $('.login-btn').click(function () { @@ -63,9 +37,9 @@ $('.login-btn').click(function () { success: function (res) { console.log('返回数据:', res); sa.hideLoading(); - if (res.code === 200) { + if (res.code == 200) { layer.msg('登录成功', {anim: 0, icon: 6}); - sa.setToken(res.data); + setCookie("Authorization", "Bearer " + res.data, 1); setTimeout(function () { location.reload(); }, 800) @@ -94,6 +68,6 @@ $('[name=name],[name=pwd]').bind('keypress', function (event) { // 输入框获取焦点 $("[name=name]").focus(); -// 打印信息 +// 打印信息 var str = "This page is provided by Sa-Token, Please refer to: " + "https://sa-token.cc/"; console.log(str); diff --git a/ruoyi-modules/ruoyi-system-saas/pom.xml b/ruoyi-modules/ruoyi-system-saas/pom.xml index f46d7794a..9b4ecac4d 100644 --- a/ruoyi-modules/ruoyi-system-saas/pom.xml +++ b/ruoyi-modules/ruoyi-system-saas/pom.xml @@ -16,29 +16,6 @@ - - org.springframework.boot - spring-boot-starter-actuator - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-discovery - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config - - - - - org.springframework.cloud - spring-cloud-starter-bootstrap - - - org.dromara diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index 022a04c47..0fc6d5513 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -16,29 +16,6 @@ - - org.springframework.boot - spring-boot-starter-actuator - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-discovery - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config - - - - - org.springframework.cloud - spring-cloud-starter-bootstrap - - - org.dromara