From ed79efc5fa2d0ac29f42d1137ff9b19370341f86 Mon Sep 17 00:00:00 2001 From: Max Batischev Date: Tue, 18 Mar 2025 13:12:59 +0300 Subject: [PATCH] Add support ResolvableTypeProvider to authorization events Closes gh-16700 Signed-off-by: Max Batischev --- .../event/AuthorizationDeniedEvent.java | 14 +++++++++++++- .../event/AuthorizationGrantedEvent.java | 14 +++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java index 05d0fcdbc5..7121f7e25a 100644 --- a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java +++ b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationDeniedEvent.java @@ -19,6 +19,8 @@ package org.springframework.security.authorization.event; import java.util.function.Supplier; import org.springframework.context.ApplicationEvent; +import org.springframework.core.ResolvableType; +import org.springframework.core.ResolvableTypeProvider; import org.springframework.security.authorization.AuthorizationDecision; import org.springframework.security.authorization.AuthorizationResult; import org.springframework.security.core.Authentication; @@ -31,7 +33,7 @@ import org.springframework.security.core.Authentication; * @since 5.7 */ @SuppressWarnings("serial") -public class AuthorizationDeniedEvent extends AuthorizationEvent { +public class AuthorizationDeniedEvent extends AuthorizationEvent implements ResolvableTypeProvider { /** * @deprecated Please use an {@link AuthorizationResult} constructor instead @@ -59,4 +61,14 @@ public class AuthorizationDeniedEvent extends AuthorizationEvent { return (T) getSource(); } + /** + * Get {@link ResolvableType} of this class. + * @return {@link ResolvableType} + * @since 6.5 + */ + @Override + public ResolvableType getResolvableType() { + return ResolvableType.forClassWithGenerics(getClass(), ResolvableType.forInstance(getObject())); + } + } diff --git a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java index 9cde351930..26115a5100 100644 --- a/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java +++ b/core/src/main/java/org/springframework/security/authorization/event/AuthorizationGrantedEvent.java @@ -20,6 +20,8 @@ import java.io.Serial; import java.util.function.Supplier; import org.springframework.context.ApplicationEvent; +import org.springframework.core.ResolvableType; +import org.springframework.core.ResolvableTypeProvider; import org.springframework.security.authorization.AuthorizationDecision; import org.springframework.security.authorization.AuthorizationResult; import org.springframework.security.core.Authentication; @@ -32,7 +34,7 @@ import org.springframework.security.core.Authentication; * @since 5.7 */ @SuppressWarnings("serial") -public class AuthorizationGrantedEvent extends AuthorizationEvent { +public class AuthorizationGrantedEvent extends AuthorizationEvent implements ResolvableTypeProvider { @Serial private static final long serialVersionUID = -8690818228055810339L; @@ -65,4 +67,14 @@ public class AuthorizationGrantedEvent extends AuthorizationEvent { return (T) getSource(); } + /** + * Get {@link ResolvableType} of this class. + * @return {@link ResolvableType} + * @since 6.5 + */ + @Override + public ResolvableType getResolvableType() { + return ResolvableType.forClassWithGenerics(getClass(), ResolvableType.forInstance(getObject())); + } + }