diff --git a/hsweb-authorization/hsweb-authorization-api/pom.xml b/hsweb-authorization/hsweb-authorization-api/pom.xml
index 9862aafaa..203c990db 100644
--- a/hsweb-authorization/hsweb-authorization-api/pom.xml
+++ b/hsweb-authorization/hsweb-authorization-api/pom.xml
@@ -5,10 +5,11 @@
hsweb-authorization
org.hswebframework.web
- 4.0.18
+ 4.0.19
4.0.0
+ ${artifactId}
授权,权限管理API
hsweb-authorization-api
diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/annotation/Authorize.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/annotation/Authorize.java
index 6921ea32c..c8e647c08 100644
--- a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/annotation/Authorize.java
+++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/annotation/Authorize.java
@@ -44,6 +44,14 @@
Dimension[] dimension() default {};
+ /**
+ * 是否运行匿名访问,匿名访问时,直接允许执行,否则将进行权限验证.
+ *
+ * @return 是否允许匿名访问
+ * @since 4.0.19
+ */
+ boolean anonymous() default false;
+
/**
* 验证失败时返回的消息
*
diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/AuthorizeDefinition.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/AuthorizeDefinition.java
index b1c4e8b00..8ab805bd1 100644
--- a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/AuthorizeDefinition.java
+++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/define/AuthorizeDefinition.java
@@ -21,6 +21,10 @@ public interface AuthorizeDefinition {
boolean isEmpty();
+ default boolean allowAnonymous() {
+ return false;
+ }
+
default String getDescription() {
ResourcesDefinition res = getResources();
StringJoiner joiner = new StringJoiner(";");
diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/UserTokenBeforeCreateEvent.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/UserTokenBeforeCreateEvent.java
new file mode 100644
index 000000000..ddcaa8967
--- /dev/null
+++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/UserTokenBeforeCreateEvent.java
@@ -0,0 +1,19 @@
+package org.hswebframework.web.authorization.token;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.Setter;
+import org.hswebframework.web.event.DefaultAsyncEvent;
+
+@Getter
+@Setter
+@AllArgsConstructor
+public class UserTokenBeforeCreateEvent extends DefaultAsyncEvent {
+ private final UserToken token;
+
+ /**
+ * 过期时间,单位毫秒,-1为不过期.
+ */
+ private long expires;
+
+}
diff --git a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/redis/RedisUserTokenManager.java b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/redis/RedisUserTokenManager.java
index 4e7af72a2..ff2f00b89 100644
--- a/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/redis/RedisUserTokenManager.java
+++ b/hsweb-authorization/hsweb-authorization-api/src/main/java/org/hswebframework/web/authorization/token/redis/RedisUserTokenManager.java
@@ -9,6 +9,7 @@
import org.hswebframework.web.authorization.token.event.UserTokenCreatedEvent;
import org.hswebframework.web.authorization.token.event.UserTokenRemovedEvent;
import org.hswebframework.web.bean.FastBeanCopier;
+import org.hswebframework.web.event.AsyncEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.data.redis.connection.ReactiveRedisConnectionFactory;
import org.springframework.data.redis.core.*;
@@ -44,21 +45,21 @@ public RedisUserTokenManager(ReactiveRedisOperations