diff --git a/pom.xml b/pom.xml
index 5c49a13..944eeea 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,7 +40,7 @@
com.chinaweal.youfool
youfool-framework-springboot
- 3.2.0-SNAPSHOT
+ 3.3.1-SNAPSHOT
diff --git a/src/main/java/com/chinaweal/youfool/prj/common/constants/SessionConstants.java b/src/main/java/com/chinaweal/youfool/prj/common/constants/SessionConstants.java
new file mode 100644
index 0000000..e08d603
--- /dev/null
+++ b/src/main/java/com/chinaweal/youfool/prj/common/constants/SessionConstants.java
@@ -0,0 +1,11 @@
+package com.chinaweal.youfool.prj.common.constants;
+
+/**
+ * session常量
+ * @author lroyia
+ * @since 2022/7/19 11:02
+ **/
+public interface SessionConstants {
+
+ String USER_KEY = "user";
+}
diff --git a/src/main/java/com/chinaweal/youfool/prj/common/util/StringUtils.java b/src/main/java/com/chinaweal/youfool/prj/common/util/StringUtils.java
index 1d0e891..d414ff2 100644
--- a/src/main/java/com/chinaweal/youfool/prj/common/util/StringUtils.java
+++ b/src/main/java/com/chinaweal/youfool/prj/common/util/StringUtils.java
@@ -1,9 +1,114 @@
package com.chinaweal.youfool.prj.common.util;
+import java.util.UUID;
+
/**
* 字符串工具类
+ *
* @author lroyia
* @since 2022/4/20 15:04
**/
-public abstract class StringUtils {
+public abstract class StringUtils extends com.chinaweal.youfool.framework.springboot.common.util.StringUtils {
+
+ private static final char[] HEX_DIGITS_LOW = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+ private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+
+ public static final char[] FILE_NAME_SPECIFY_CHARS = new char[]{'/', '\\', ':', '*', '"', '<', '>', '|'};
+
+ /**
+ * 是否全为非空
+ *
+ * @param str 判断字串(可选参数)
+ * @return 判断结果
+ * @author lroyia
+ * @since 2023年5月26日 11:39:29
+ */
+ public static boolean isNotBlankALl(String... str) {
+ for (String each : str) {
+ if (isBlank(each)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 是否全为空
+ *
+ * @param str 判断字串(可选参数)
+ * @return 判断结果
+ * @author lroyia
+ * @since 2023年5月26日 11:35:29
+ */
+ public static boolean isBlankAll(String... str) {
+ for (String each : str) {
+ if (isNotBlank(each)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * 16进制字符串转byte数组
+ *
+ * @param hex 16进制字符串
+ * @return 转换结果
+ * @author lroyia
+ * @since 2022年7月12日 15:13:13
+ */
+ public static byte[] hexFromString(String hex) {
+ int len = hex.length();
+ byte[] buf = new byte[(len + 1) / 2];
+ int i = 0;
+ int j = 0;
+ if (len % 2 == 1)
+ buf[j++] = (byte) fromDigit(hex.charAt(i++));
+ while (i < len)
+ buf[j++] = (byte) (fromDigit(hex.charAt(i++)) << 4 | fromDigit(hex.charAt(i++)));
+ return buf;
+ }
+
+ /**
+ * [0-9][A-F][a-f]转整形
+ *
+ * @param ch 字符
+ * @return 转换结果
+ * @author lroyia
+ * @since 2022年7月12日 15:11:59
+ */
+ public static int fromDigit(char ch) {
+ if (ch >= '0' && ch <= '9')
+ return ch - 48;
+ if (ch >= 'A' && ch <= 'F')
+ return (ch - 65) + 10;
+ if (ch >= 'a' && ch <= 'f')
+ return (ch - 97) + 10;
+ else
+ throw new IllegalArgumentException("invalid hex digit '" + ch + "'");
+ }
+
+ /**
+ * 不是数字
+ *
+ * @param cs 字符
+ * @return 判断结果
+ * @author lroyia
+ * @since 2022年8月22日 14:56:01
+ */
+ public static boolean isNotNumeric(CharSequence cs) {
+ return !isNumeric(cs);
+ }
+
+ /**
+ * 获取一个UUID
+ *
+ * @return UUID
+ * @author lroyia
+ * @since 2022年9月15日 10:27:03
+ */
+ public static String getUUID() {
+ return UUID.randomUUID().toString().replace("-", EMPTY);
+ }
+
}
diff --git a/src/main/java/com/chinaweal/youfool/prj/config/SaTokenConfig.java b/src/main/java/com/chinaweal/youfool/prj/config/SaTokenConfig.java
deleted file mode 100644
index 7e7310d..0000000
--- a/src/main/java/com/chinaweal/youfool/prj/config/SaTokenConfig.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.chinaweal.youfool.prj.config;
-
-import cn.dev33.satoken.context.model.SaRequest;
-import cn.dev33.satoken.context.model.SaResponse;
-import cn.dev33.satoken.router.SaRouteFunction;
-import cn.dev33.satoken.router.SaRouter;
-import cn.dev33.satoken.stp.StpUtil;
-
-/**
- * SaToken权限与鉴权配置
- * @author lroyia
- * @since 2022/4/20 16:37
- **/
-public class SaTokenConfig implements SaRouteFunction {
-
- @Override
- public void run(SaRequest request, SaResponse response, Object handler) {
- // 根据路由划分模块,不同模块不同鉴权
-// SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
-// SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
-// SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
-// SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
-// SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
-// SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));
- }
-}
diff --git a/src/main/java/com/chinaweal/youfool/prj/config/ShiroConfig.java b/src/main/java/com/chinaweal/youfool/prj/config/ShiroConfig.java
deleted file mode 100644
index edd95b0..0000000
--- a/src/main/java/com/chinaweal/youfool/prj/config/ShiroConfig.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package com.chinaweal.youfool.prj.config;
-
-import com.chinaweal.youfool.framework.springboot.user.shiro.JWTRestfulFilter;
-import com.chinaweal.youfool.framework.springboot.user.shiro.RestShiroFilterFactoryBean;
-import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
-import org.apache.shiro.mgt.DefaultSubjectDAO;
-import org.apache.shiro.mgt.SecurityManager;
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
-import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
-import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
-import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
-import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
-import org.springframework.context.annotation.Bean;
-
-import javax.annotation.PostConstruct;
-import javax.servlet.Filter;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * shiro配置
- * 自youfool-framework3.2.0版本起,弃用shiro,改用sa-token作为权限支持,本类可删除
- */
-//@Configuration
-@Deprecated
-public class ShiroConfig {
-
- @Bean
- public ShiroFilterFactoryBean factory(SecurityManager securityManager) {
- ShiroFilterFactoryBean factoryBean = new RestShiroFilterFactoryBean();
- factoryBean.setSecurityManager(securityManager);
-
- Map filterMap = factoryBean.getFilters();
- //注:restful如: /xxx==GET = jwtRestful[org:dept:list]这里的 getUrl,getMethod 和 getPerms 分别对应 /xxx,GET 和 org:dept:list。
- filterMap.put("jwtRestful", new JWTRestfulFilter());
- factoryBean.setFilters(filterMap);
- Map filterChainDefinitionMap = new LinkedHashMap<>();
- filterChainDefinitionMap.put("/xxx==GET", "jwtRestful[org:dept:list]");
- filterChainDefinitionMap.put("/**", "jwtRestful");
- factoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
- return factoryBean;
- }
-
- @PostConstruct
- public void loadShiro() throws Exception {
- }
-
- /**
- * 注入 securityManager
- */
- @Bean
- public SecurityManager securityManager() {
- DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
- //securityManager.setRealm(userRealm);
- /*
- * 关闭shiro自带的session,详情见文档
- * http://shiro.apache.org/session-management.html#SessionManagement-StatelessApplications%28Sessionless%29
- */
- DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
- DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
- defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
- subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
- securityManager.setSubjectDAO(subjectDAO);
- return securityManager;
- }
-
- /**
- * 添加注解支持
- */
- @Bean
- public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
- DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
- // 强制使用cglib,防止重复代理和可能引起代理出错的问题
- // https://zhuanlan.zhihu.com/p/29161098
- defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
- return defaultAdvisorAutoProxyCreator;
- }
-
- @Bean
- public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
- return new LifecycleBeanPostProcessor();
- }
-
- @Bean
- public AuthorizationAttributeSourceAdvisor authorizationAttribute() {
- AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
- authorizationAttributeSourceAdvisor.setSecurityManager(securityManager());
- return authorizationAttributeSourceAdvisor;
- }
-}
diff --git a/src/main/java/com/chinaweal/youfool/prj/config/SpringMvcConfig.java b/src/main/java/com/chinaweal/youfool/prj/config/SpringMvcConfig.java
index 4de6f3e..567e40b 100644
--- a/src/main/java/com/chinaweal/youfool/prj/config/SpringMvcConfig.java
+++ b/src/main/java/com/chinaweal/youfool/prj/config/SpringMvcConfig.java
@@ -1,29 +1,45 @@
package com.chinaweal.youfool.prj.config;
-import cn.dev33.satoken.interceptor.SaRouteInterceptor;
+import cn.dev33.satoken.interceptor.SaInterceptor;
+import cn.dev33.satoken.router.SaRouter;
+import cn.dev33.satoken.stp.StpUtil;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* spring mvc 配置
+ *
* @author lroyia
* @since 2022/2/8 18:04
**/
+@Slf4j
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {
/**
* 拦截器注册
- * @param registry 注册对象
+ *
+ * @param registry 注册对象
* @author lroyia
- * @since 2022年4月20日 16:41:54
+ * @since 2022年4月20日 16:41:54
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
- // SaToken路由拦截与鉴权
- registry.addInterceptor(new SaRouteInterceptor(new SaTokenConfig()))
- .addPathPatterns("/**")
- .excludePathPatterns("/user/auth/**");
+ // 注册 Sa-Token 拦截器,定义详细认证规则
+ registry.addInterceptor(new SaInterceptor(handler -> {
+// // 根据路由划分模块,不同模块不同鉴权
+// SaRouter.match("/user/**", r -> StpUtil.checkPermission("user"));
+// SaRouter.match("/admin/**", r -> StpUtil.checkPermission("admin"));
+// SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
+// SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
+// SaRouter.match("/notice/**", r -> StpUtil.checkPermission("notice"));
+// SaRouter.match("/comment/**", r -> StpUtil.checkPermission("comment"));
+ // 指定一条 match 规则
+ SaRouter.notMatch("/user/auth/**", "/test/**", "/doc.html**", "/cross/**", "/swagger*",
+ "/cms/index.html", "/cms/static/**", "/cms/favicon.ico", "/cms/user/login", "/network/ping", "/error", "/static/data/**")
+ .match("/**", r -> StpUtil.checkLogin());
+ })).addPathPatterns("/**");
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/chinaweal/youfool/prj/controller/LoginController.java b/src/main/java/com/chinaweal/youfool/prj/controller/LoginController.java
index 8fa411d..c07febc 100644
--- a/src/main/java/com/chinaweal/youfool/prj/controller/LoginController.java
+++ b/src/main/java/com/chinaweal/youfool/prj/controller/LoginController.java
@@ -1,15 +1,14 @@
package com.chinaweal.youfool.prj.controller;
import cn.dev33.satoken.session.SaSession;
-import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import com.chinaweal.youfool.framework.springboot.common.base.BaseController;
import com.chinaweal.youfool.framework.springboot.common.util.AssertUtils;
import com.chinaweal.youfool.framework.springboot.common.util.RSAUtil;
import com.chinaweal.youfool.framework.springboot.rest.RestResult;
import com.chinaweal.youfool.framework.springboot.rest.ResultCode;
-import com.chinaweal.youfool.framework.springboot.user.entity.LoginInfo;
import com.chinaweal.youfool.framework.springboot.user.entity.UserBase;
+import com.chinaweal.youfool.prj.common.constants.SessionConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -89,15 +88,13 @@ public class LoginController extends BaseController {
* @since 2022年4月20日 15:58:26
*/
@GetMapping("login/info")
- public RestResult> loginInfo() {
+ public RestResult loginInfo() {
boolean login = StpUtil.isLogin();
- SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
- LoginInfo userInfo = new LoginInfo<>(login, null);
if (login) {
SaSession session = getSession();
- userInfo.setUserInfo((UserBase) session.get("user"));
+ return RestResult.ok((UserBase) session.get(SessionConstants.USER_KEY));
}
- return RestResult.ok(userInfo);
+ return RestResult.ok(null);
}
/**
diff --git a/src/main/java/com/chinaweal/youfool/prj/service/impl/UserBaseServiceImpl.java b/src/main/java/com/chinaweal/youfool/prj/service/impl/UserBaseServiceImpl.java
index 66be599..7f3a671 100644
--- a/src/main/java/com/chinaweal/youfool/prj/service/impl/UserBaseServiceImpl.java
+++ b/src/main/java/com/chinaweal/youfool/prj/service/impl/UserBaseServiceImpl.java
@@ -1,16 +1,40 @@
package com.chinaweal.youfool.prj.service.impl;
+import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.session.SaSession;
+import cn.dev33.satoken.stp.StpUtil;
+import com.chinaweal.youfool.framework.springboot.rest.RestResult;
+import com.chinaweal.youfool.framework.springboot.user.entity.UserBase;
import com.chinaweal.youfool.framework.springboot.user.service.UserBaseService;
+import com.chinaweal.youfool.prj.common.constants.SessionConstants;
import org.springframework.stereotype.Service;
+import java.util.List;
+
/**
* 用户
*/
@Service
public class UserBaseServiceImpl implements UserBaseService {
+ @Override
+ public RestResult login(String userName, String password, boolean frameworkLogin) {
+ return null;
+ }
@Override
- public boolean isValidToken(String token) {
- return false;
+ public UserBase getCurrentUser() {
+ try {
+ SaSession session = StpUtil.getSession();
+ return session.get(SessionConstants.USER_KEY, null);
+ } catch (NotLoginException e) {
+ UserBase userBase = new UserBase();
+ userBase.setUsername("guest");
+ return userBase;
+ }
+ }
+
+ @Override
+ public List getUserInfoByLoginId(List loginIdList) {
+ return null;
}
}