diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java b/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java index ee1f552e..a2dea029 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/SaManager.java @@ -102,8 +102,8 @@ public class SaManager { SaTokenEventCenter.doRegisterComponent("SaTokenDao", saTokenDao); } private static void setSaTokenDaoMethod(SaTokenDao saTokenDao) { - if((SaManager.saTokenDao instanceof SaTokenDaoDefaultImpl)) { - ((SaTokenDaoDefaultImpl)SaManager.saTokenDao).endRefreshThread(); + if (SaManager.saTokenDao != null) { + SaManager.saTokenDao.onChange(); } SaManager.saTokenDao = saTokenDao; } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java index 48682c74..75a46cd4 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDao.java @@ -199,6 +199,13 @@ public interface SaTokenDao { * @return 查询到的数据集合 */ List searchData(String prefix, String keyword, int start, int size, boolean sortType); - - + + + // --------------------- 实例相关 --------------------- + + /** + * 当 SaManager.saTokenDao 变更时,调用该方法 + */ + default void onChange() { + } } diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java index dc9cbae7..eae8d6e9 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/dao/SaTokenDaoDefaultImpl.java @@ -260,12 +260,12 @@ public class SaTokenDaoDefaultImpl implements SaTokenDao { }); this.refreshThread.start(); } - + /** * 结束定时任务,不再定时清理过期数据 */ - public void endRefreshThread() { + @Override + public void onChange() { this.refreshFlag = false; } - } diff --git a/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenActionHandler.java b/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenActionHandler.java index 61fe3623..7503d151 100644 --- a/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenActionHandler.java +++ b/sa-token-starter/sa-token-jfinal-plugin/src/main/java/cn/dev33/satoken/jfinal/SaTokenActionHandler.java @@ -74,9 +74,12 @@ public class SaTokenActionHandler extends ActionHandler { // Controller controller = action.getControllerClass().newInstance(); controller = controllerFactory.getController(action.getControllerClass()); CPI._init_(controller, action, request, response, urlPara[0]); - //加入SaToken上下文处理 + if (resolveJson && controller.isJsonRequest()) { + // 注入 JsonRequest 包装对象接管 request + controller.setHttpServletRequest(jsonRequestFactory.apply(controller.getRawData(), controller.getRequest())); + } + //加入SaToken上下文处理 SaControllerContext.hold(controller); - if (devMode) { if (actionReporter.isReportAfterInvocation(request)) { new Invocation(action, controller).invoke();