diff --git a/sa-token-demo/sa-token-demo-solon/pom.xml b/sa-token-demo/sa-token-demo-solon/pom.xml
index 1e545f76..37a41133 100644
--- a/sa-token-demo/sa-token-demo-solon/pom.xml
+++ b/sa-token-demo/sa-token-demo-solon/pom.xml
@@ -18,7 +18,7 @@
org.noear
solon-web
- 1.10.0
+ 1.10.4
diff --git a/sa-token-starter/sa-token-solon-plugin/pom.xml b/sa-token-starter/sa-token-solon-plugin/pom.xml
index ad6aa6aa..1b1ac43f 100644
--- a/sa-token-starter/sa-token-solon-plugin/pom.xml
+++ b/sa-token-starter/sa-token-solon-plugin/pom.xml
@@ -20,7 +20,7 @@
org.noear
solon
- 1.10.0
+ 1.10.4
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java
index f510a4a0..26b91cac 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/XPluginImp.java
@@ -71,10 +71,11 @@ public class XPluginImp implements Plugin {
});
// 注入侦听器 Bean
- EventBus.subscribe(SaTokenListener.class, bw->{
- SaTokenEventCenter.registerListener(bw);
+ context.subBean(SaTokenListener.class, sl->{
+ SaTokenEventCenter.registerListener(sl);
});
+
// 注入权限认证 Bean
context.getWrapAsyn(StpInterface.class, bw->{
SaManager.setStpInterface(bw.raw());
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenAnnotationInterceptor.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenAnnotationInterceptor.java
index 2f73754c..e6b1ac81 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenAnnotationInterceptor.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenAnnotationInterceptor.java
@@ -1,24 +1,40 @@
package cn.dev33.satoken.solon.integration;
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.dev33.satoken.strategy.SaStrategy;
import org.noear.solon.core.aspect.Interceptor;
import org.noear.solon.core.aspect.Invocation;
+import org.noear.solon.core.handle.Context;
-import cn.dev33.satoken.strategy.SaStrategy;
+import java.lang.reflect.Method;
/**
* @author noear
* @since 1.4
+ * @deprecated 1.10,改用 SaTokenPathInterceptor
*/
+@Deprecated
public class SaTokenAnnotationInterceptor implements Interceptor {
-
- public static final SaTokenAnnotationInterceptor INSTANCE = new SaTokenAnnotationInterceptor();
+
+ public static final SaTokenAnnotationInterceptor INSTANCE = new SaTokenAnnotationInterceptor();
@Override
public Object doIntercept(Invocation inv) throws Throwable {
- // 注解鉴权
- SaStrategy.me.checkMethodAnnotation.accept(inv.method().getMethod());
+ // 如果此 Method 或其所属 Class 标注了 @SaIgnore,则忽略掉鉴权
+ Context ctx = Context.current();
- // 执行原有逻辑
- return inv.invoke();
+ if (ctx != null && "1".equals(ctx.attr("_SaTokenPathInterceptor"))) {
+ // 执行原有逻辑
+ return inv.invoke();
+ } else {
+
+ Method method = inv.method().getMethod();
+ if (SaStrategy.me.isAnnotationPresent.apply(method, SaIgnore.class) == false) {
+ SaStrategy.me.checkMethodAnnotation.accept(method);
+ }
+
+ // 执行原有逻辑
+ return inv.invoke();
+ }
}
-}
+}
\ No newline at end of file
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathFilter.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathFilter.java
index ef5e760e..dc07e187 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathFilter.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathFilter.java
@@ -16,9 +16,14 @@ import java.util.Arrays;
import java.util.List;
/**
+ * sa-token 基于路由的过滤式鉴权( +SaTokenAnnotationInterceptor )
+ *
* @author noear
* @since 1.9
+ * @deprecated 1.10,改用 SaTokenPathInterceptor
+ * @see SaTokenPathInterceptor
*/
+@Deprecated
public class SaTokenPathFilter implements Filter {
// ------------------------ 设置此过滤器 拦截 & 放行 的路由
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathInterceptor.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathInterceptor.java
index b89adca0..2d32ac6a 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathInterceptor.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/integration/SaTokenPathInterceptor.java
@@ -1,23 +1,35 @@
package cn.dev33.satoken.solon.integration;
+import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.exception.BackResultException;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.exception.StopMatchException;
import cn.dev33.satoken.filter.SaFilterAuthStrategy;
import cn.dev33.satoken.filter.SaFilterErrorStrategy;
import cn.dev33.satoken.router.SaRouter;
+import cn.dev33.satoken.strategy.SaStrategy;
+import org.noear.solon.core.handle.Action;
import org.noear.solon.core.handle.Context;
import org.noear.solon.core.handle.Handler;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
- * sa-token基于路由的拦截式鉴权
+ * sa-token 基于路由的拦截式鉴权(增加了注解的处理)
+ *
* @author kong
+ * @since 1.9
+ * @author noear
+ * @since 1.10
*/
public class SaTokenPathInterceptor implements Handler {
+ /**
+ * 是否打开注解鉴权
+ */
+ public boolean isAnnotation = true;
// ------------------------ 设置此过滤器 拦截 & 放行 的路由
@@ -156,10 +168,30 @@ public class SaTokenPathInterceptor implements Handler {
@Override
public void handle(Context ctx) throws Throwable {
try {
- // 执行全局过滤器
+ //注处处理
+ Action action = ctx.action();
+
+ if(isAnnotation && action != null){
+ ctx.attrSet("_SaTokenPathInterceptor", "1");
+
+ // 获取此请求对应的 Method 处理函数
+ Method method = action.method().getMethod();
+
+ // 如果此 Method 或其所属 Class 标注了 @SaIgnore,则忽略掉鉴权
+ if(SaStrategy.me.isAnnotationPresent.apply(method, SaIgnore.class)) {
+ return;
+ }
+
+ // 注解校验
+ SaStrategy.me.checkMethodAnnotation.accept(method);
+ }else{
+ ctx.attrSet("_SaTokenPathInterceptor", "0");
+ }
+
+ //路径规则处理
SaRouter.match(includeList).notMatch(excludeList).check(r -> {
- beforeAuth.run(null);
- auth.run(null);
+ beforeAuth.run(action);
+ auth.run(action);
});
} catch (StopMatchException e) {
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaContextForSolon.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaContextForSolon.java
index 3a9f4dee..4121cde5 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaContextForSolon.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaContextForSolon.java
@@ -1,12 +1,11 @@
package cn.dev33.satoken.solon.model;
-import org.noear.solon.core.handle.Context;
-import org.noear.solon.core.util.PathAnalyzer;
-
import cn.dev33.satoken.context.SaTokenContext;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.context.model.SaResponse;
import cn.dev33.satoken.context.model.SaStorage;
+import org.noear.solon.core.handle.Context;
+import org.noear.solon.core.util.PathAnalyzer;
/**
* @author noear
@@ -45,12 +44,12 @@ public class SaContextForSolon implements SaTokenContext {
return PathAnalyzer.get(pattern).matches(path);
}
- /**
- * 此上下文是否有效
- * @return /
- */
- public boolean isValid() {
- return Context.current() != null;
- }
-
+ /**
+ * 此上下文是否有效
+ * @return /
+ */
+ public boolean isValid() {
+ return Context.current() != null;
+ }
+
}
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaRequestForSolon.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaRequestForSolon.java
index 75cc1573..ae66fd12 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaRequestForSolon.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaRequestForSolon.java
@@ -1,20 +1,19 @@
package cn.dev33.satoken.solon.model;
-import org.noear.solon.core.handle.Context;
-
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.util.SaFoxUtil;
+import org.noear.solon.core.handle.Context;
/**
* @author noear
* @since 1.4
*/
public class SaRequestForSolon implements SaRequest {
-
- protected Context ctx;
-
- public SaRequestForSolon(){
+
+ protected Context ctx;
+
+ public SaRequestForSolon(){
ctx = Context.current();
}
@@ -44,23 +43,23 @@ public class SaRequestForSolon implements SaRequest {
}
@Override
- public String getUrl() {
- String currDomain = SaManager.getConfig().getCurrDomain();
- if(SaFoxUtil.isEmpty(currDomain) == false) {
- return currDomain + this.getRequestPath();
- }
- return ctx.url();
- }
-
+ public String getUrl() {
+ String currDomain = SaManager.getConfig().getCurrDomain();
+ if(SaFoxUtil.isEmpty(currDomain) == false) {
+ return currDomain + this.getRequestPath();
+ }
+ return ctx.url();
+ }
+
@Override
public String getMethod() {
return ctx.method();
}
@Override
- public Object forward(String path) {
- ctx.forward(path);
- return null;
- }
-
+ public Object forward(String path) {
+ ctx.forward(path);
+ return null;
+ }
+
}
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaResponseForSolon.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaResponseForSolon.java
index a80bba80..76d9dff3 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaResponseForSolon.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaResponseForSolon.java
@@ -1,49 +1,48 @@
package cn.dev33.satoken.solon.model;
-import org.noear.solon.core.handle.Context;
-
import cn.dev33.satoken.context.model.SaResponse;
+import org.noear.solon.core.handle.Context;
/**
* @author noear
* @since 1.4
*/
public class SaResponseForSolon implements SaResponse {
-
+
protected Context ctx;
- public SaResponseForSolon() {
- ctx = Context.current();
- }
+ public SaResponseForSolon() {
+ ctx = Context.current();
+ }
- @Override
- public Object getSource() {
- return ctx;
- }
+ @Override
+ public Object getSource() {
+ return ctx;
+ }
@Override
public SaResponse setStatus(int sc) {
ctx.status(sc);
return this;
}
-
- @Override
- public SaResponse setHeader(String name, String value) {
- ctx.headerSet(name, value);
- return this;
- }
+
+ @Override
+ public SaResponse setHeader(String name, String value) {
+ ctx.headerSet(name, value);
+ return this;
+ }
/**
* 在响应头里添加一个值
* @param name 名字
* @param value 值
- * @return 对象自身
+ * @return 对象自身
*/
public SaResponse addHeader(String name, String value) {
ctx.headerAdd(name, value);
return this;
}
-
+
@Override
public Object redirect(String url) {
ctx.redirect(url);
diff --git a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaStorageForSolon.java b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaStorageForSolon.java
index 6bea71ba..756c0819 100644
--- a/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaStorageForSolon.java
+++ b/sa-token-starter/sa-token-solon-plugin/src/main/java/cn/dev33/satoken/solon/model/SaStorageForSolon.java
@@ -8,8 +8,8 @@ import org.noear.solon.core.handle.Context;
* @since 1.4
*/
public class SaStorageForSolon implements SaStorage {
-
- protected Context ctx;
+
+ protected Context ctx;
public SaStorageForSolon() {
ctx = Context.current();
@@ -23,7 +23,7 @@ public class SaStorageForSolon implements SaStorage {
@Override
public SaStorageForSolon set(String key, Object value) {
ctx.attrSet(key, value);
- return this;
+ return this;
}
@Override
@@ -34,6 +34,6 @@ public class SaStorageForSolon implements SaStorage {
@Override
public SaStorageForSolon delete(String key) {
ctx.attrMap().remove(key);
- return this;
+ return this;
}
}