diff --git a/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisBase64.java b/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisBase64.java index c78ca421..96eb5ca2 100644 --- a/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisBase64.java +++ b/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisBase64.java @@ -105,6 +105,11 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDaoBySessionFollowObject return redisBucket.getAndDeserialize(key); } + @Override + public T getObject(String key, Class classType) { + return redisBucket.getAndDeserialize(key, classType); + } + /** * 写入Object,并设定存活时间 (单位: 秒) */ diff --git a/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisJson.java b/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisJson.java index 31cc4e26..33fdc1a4 100644 --- a/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisJson.java +++ b/sa-token-plugin/sa-token-redisx/src/main/java/cn/dev33/satoken/dao/SaTokenDaoOfRedisJson.java @@ -110,6 +110,12 @@ public class SaTokenDaoOfRedisJson implements SaTokenDaoBySessionFollowObject { return ONode.deserialize(value); } + @Override + public T getObject(String key, Class classType) { + String value = get(key); + return ONode.deserialize(value, classType); + } + /** * 写入Object,并设定存活时间 (单位: 秒) */ diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisBase64.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisBase64.java index 3523be14..c92eb8e4 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisBase64.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisBase64.java @@ -106,6 +106,11 @@ public class SaTokenDaoOfRedisBase64 implements SaTokenDaoBySessionFollowObject return redisBucket.getAndDeserialize(key); } + @Override + public T getObject(String key, Class classType) { + return redisBucket.getAndDeserialize(key, classType); + } + /** * 写入Object,并设定存活时间 (单位: 秒) */ diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisJson.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisJson.java index c6ee6608..161733d7 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisJson.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedisJson.java @@ -111,6 +111,12 @@ public class SaTokenDaoOfRedisJson implements SaTokenDaoBySessionFollowObject { return ONode.deserialize(value); } + @Override + public T getObject(String key, Class classType) { + String value = get(key); + return ONode.deserialize(value, classType); + } + /** * 写入Object,并设定存活时间 (单位: 秒) */ diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedissonJackson.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedissonJackson.java index 7d84e923..cbecff38 100644 --- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedissonJackson.java +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/dao/SaTokenDaoOfRedissonJackson.java @@ -206,6 +206,12 @@ public class SaTokenDaoOfRedissonJackson implements SaTokenDaoBySessionFollowObj return rBucket.get(); } + @Override + public T getObject(String key, Class classType) { + // TODO 待实现 + return null; + } + /** * 写入Object,并设定存活时间 (单位: 秒) */ diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaFirewallCheckFilterForSolon.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaFirewallCheckFilterForSolon.java new file mode 100644 index 00000000..caf225d3 --- /dev/null +++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaFirewallCheckFilterForSolon.java @@ -0,0 +1,62 @@ +/* + * Copyright 2020-2099 sa-token.cc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.dev33.satoken.solon.integration; + +import cn.dev33.satoken.exception.FirewallCheckException; +import cn.dev33.satoken.exception.StopMatchException; +import cn.dev33.satoken.solon.model.SaRequestForSolon; +import cn.dev33.satoken.solon.model.SaResponseForSolon; +import cn.dev33.satoken.strategy.SaFirewallStrategy; +import org.noear.solon.core.handle.Context; +import org.noear.solon.core.handle.Filter; +import org.noear.solon.core.handle.FilterChain; + +/** + * 防火墙校验过滤器 (基于 Solon) + * + * @author noear + * @since 1.41.0 + */ +public class SaFirewallCheckFilterForSolon implements Filter { + + @Override + public void doFilter(Context ctx, FilterChain chain) throws Throwable { + + SaRequestForSolon saRequest = new SaRequestForSolon(); + SaResponseForSolon saResponse = new SaResponseForSolon(); + + try { + SaFirewallStrategy.instance.check.execute(saRequest, saResponse, null); + } + catch (StopMatchException e) { + // 如果是 StopMatchException 异常,代表通过了防火墙验证,进入 Controller + } + catch (FirewallCheckException e) { + // FirewallCheckException 异常则交由异常处理策略处理 + if(SaFirewallStrategy.instance.checkFailHandle == null) { + ctx.render(e.getMessage()); + } else { + SaFirewallStrategy.instance.checkFailHandle.run(e, saRequest, saResponse, null); + } + ctx.setHandled(true); + return; + } + // 更多异常则不处理,交由 Web 框架处理 + + chain.doFilter(ctx); + } + +}