You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shiro.apache.org by "lprimak (via GitHub)" <gi...@apache.org> on 2026/10/19 00:48:50 UTC
[PR] enh: harmonized superclass / interface annotation processing [shiro]
lprimak opened a new pull request, #2917:
URL: https://github.com/apache/shiro/pull/2917
<!--
For Security Vulnerabilities, please email: security@shiro.apache.org
For more details on how to report a vulnerability see: https://www.apache.org/security/
-->
Following this checklist to help us incorporate your contribution quickly and easily:
- [ ] Make sure there is a [GitHub issue](https://github.com/apache/shiro/issues) filed
for the change (usually before you start working on it). Trivial changes like typos do not
require a GitHub issue. Your pull request should address just this issue, without pulling in other changes.
- [ ] Format the pull request title like `[#XXX] - Fixes bug in SessionManager`,
where you replace `#XXX` with the appropriate GitHub issue. Best practice
is to use the GitHub issue title in the pull request title and in the first line of the commit message.
- [ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
- [ ] add `fixes #XXX` if merging the PR should close a related issue.
- [ ] Run `mvn verify` to make sure basic checks pass. A more thorough check will be performed on your pull request automatically.
- [ ] Committers: Make sure a milestone is set on the PR
- [ ] Committers: Use "Squash and Merge" to combine all commits into one when merging a PR when appropriate.
Trivial changes like typos do not require a GitHub issue (javadoc, comments...).
In this case, just format the pull request title like `[DOC] - Add javadoc in SessionManager`.
If this is your first contribution, you have to read the [Contribution Guidelines](https://github.com/apache/shiro/blob/master/CONTRIBUTING.md)
If your pull request is about ~20 lines of code you don't need to sign an [Individual Contributor License Agreement](https://www.apache.org/licenses/icla.pdf)
if you are unsure please ask on the developers list.
To make clear that you license your contribution under the [Apache License Version 2.0, January 2004](http://www.apache.org/licenses/LICENSE-2.0)
you have to acknowledge this by using the following check-box.
- [ ] I hereby declare this contribution to be licenced under the [Apache License Version 2.0, January 2004](http://www.apache.org/licenses/LICENSE-2.0)
- [ ] In any other case, please file an [Apache Individual Contributor License Agreement](https://www.apache.org/licenses/icla.pdf).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub) via commits" <co...@shiro.apache.org>.
lprimak merged PR #2917:
URL: https://github.com/apache/shiro/pull/2917
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "bmarwell (via GitHub)" <gi...@apache.org>.
bmarwell commented on PR #2917:
URL: https://github.com/apache/shiro/pull/2917#issuecomment-6326949043
Thanks, will now take a closer look! That really means a lot to me (and probably others)!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on code in PR #2917:
URL: https://github.com/apache/shiro/pull/2917#discussion_r4341380919
##########
core/pom.xml:
##########
@@ -112,6 +112,10 @@
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-lang</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
Review Comment:
Done
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on PR #2917:
URL: https://github.com/apache/shiro/pull/2917#issuecomment-6325452827
@bmarwell Thanks for looking at this! All comments have hopefully been resolved to your satisfaction :)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on code in PR #2917:
URL: https://github.com/apache/shiro/pull/2917#discussion_r4343984873
##########
core/src/main/java/org/apache/shiro/authz/aop/AuthorizationAnnotations.java:
##########
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.shiro.authz.aop;
+
+import lombok.experimental.UtilityClass;
+import org.apache.shiro.aop.AnnotationResolver;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.apache.shiro.authz.annotation.RequiresGuest;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.authz.annotation.RequiresRoles;
+import org.apache.shiro.authz.annotation.RequiresUser;
+import org.apache.shiro.lang.util.ClassUtils;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+/**
+ * The single registry of authorization annotations Shiro understands, with their handlers and method interceptors,
+ * shared by every integration (Spring, Guice, CDI, JAX-RS, AspectJ).
+ * <p>
+ * The five Shiro annotations are always available. The JSR-250 annotations ({@code @RolesAllowed},
+ * {@code @PermitAll}, {@code @DenyAll}) are registered only when {@code jakarta.annotation} is on the class path.
+ *
+ * @since 3.0.2
+ */
+@UtilityClass
+@SuppressWarnings("checkstyle:HideUtilityClassConstructor")
Review Comment:
I thought `@UtilityClass` would be enough originally, but I still had to suppress warnings as well, so 2 vs. 3 lines, basically no difference.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "fpapon (via GitHub)" <gi...@apache.org>.
fpapon commented on PR #2917:
URL: https://github.com/apache/shiro/pull/2917#issuecomment-6357666179
There is a lot of file to review, this is hard to review...
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on code in PR #2917:
URL: https://github.com/apache/shiro/pull/2917#discussion_r4343989710
##########
core/pom.xml:
##########
@@ -112,6 +112,10 @@
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-lang</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
Review Comment:
Original code was very big without commons-lang, but I was able to strip it to bear necessities and make it concise, so all good.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on PR #2917:
URL: https://github.com/apache/shiro/pull/2917#issuecomment-6455899863
This PR is now split into 3 commits:
- main code
- test code
- documentation
Done so the PR is easier to review.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "bmarwell (via GitHub)" <gi...@apache.org>.
bmarwell commented on code in PR #2917:
URL: https://github.com/apache/shiro/pull/2917#discussion_r4340871867
##########
core/src/main/java/org/apache/shiro/authz/aop/AuthorizationAnnotations.java:
##########
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.shiro.authz.aop;
+
+import lombok.experimental.UtilityClass;
+import org.apache.shiro.aop.AnnotationResolver;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.apache.shiro.authz.annotation.RequiresGuest;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.authz.annotation.RequiresRoles;
+import org.apache.shiro.authz.annotation.RequiresUser;
+import org.apache.shiro.lang.util.ClassUtils;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+/**
+ * The single registry of authorization annotations Shiro understands, with their handlers and method interceptors,
+ * shared by every integration (Spring, Guice, CDI, JAX-RS, AspectJ).
+ * <p>
+ * The five Shiro annotations are always available. The JSR-250 annotations ({@code @RolesAllowed},
+ * {@code @PermitAll}, {@code @DenyAll}) are registered only when {@code jakarta.annotation} is on the class path.
+ *
+ * @since 3.0.2
+ */
+@UtilityClass
+@SuppressWarnings("checkstyle:HideUtilityClassConstructor")
Review Comment:
So you just want to avoid writing a private constructor?
##########
core/pom.xml:
##########
@@ -112,6 +112,10 @@
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-lang</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
Review Comment:
-1, I want to get rid of it, really
##########
support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroAnnotationFilterFeature.java:
##########
@@ -32,50 +29,33 @@
import jakarta.ws.rs.core.FeatureContext;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import jakarta.annotation.security.DenyAll;
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.security.RolesAllowed;
import static org.apache.shiro.web.jaxrs.SubjectPrincipalRequestFilter.SHIRO_WEB_JAXRS_DISABLE_PRINCIPAL_PARAM;
/**
* Wraps {@link AuthorizationFilter filters} around JAX-RS resources that are annotated with Shiro annotations.
+ * Annotations are resolved on the resource method, the resource class, their supertypes and interfaces, and as
+ * meta-annotations, see {@link AnnotationHierarchy#findAnnotation(java.lang.reflect.Method, Class, Class)}.
*
* @since 1.4
*/
public class ShiroAnnotationFilterFeature implements DynamicFeature {
- private static final List<Class<? extends Annotation>> SHIRO_ANNOTATIONS = List.of(
- RequiresPermissions.class,
- RequiresRoles.class,
- RequiresAuthentication.class,
- RequiresUser.class,
- RequiresGuest.class);
-
- private static final List<Class<? extends Annotation>> JSR_250_ANNOTATIONS = List.of(
- RolesAllowed.class, PermitAll.class, DenyAll.class);
-
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
List<Annotation> authzSpecs = new ArrayList<>();
- var annotations = SHIRO_ANNOTATIONS;
+ Collection<Class<? extends Annotation>> annotations = AuthorizationAnnotations.shiroTypes();
if (Boolean.TRUE.equals(context.getConfiguration().getProperty(SHIRO_WEB_JAXRS_DISABLE_PRINCIPAL_PARAM))) {
- annotations = Stream.concat(SHIRO_ANNOTATIONS.stream(), JSR_250_ANNOTATIONS.stream())
- .collect(Collectors.toList());
+ annotations = AuthorizationAnnotations.allTypes();
}
for (Class<? extends Annotation> annotationClass : annotations) {
- // XXX What is the performance of getAnnotation vs getAnnotations?
- Annotation methodAuthzSpec = resourceInfo.getResourceMethod().getAnnotation(annotationClass);
- Annotation classAuthzSpec = resourceInfo.getResourceClass().getAnnotation(annotationClass);
-
- if (methodAuthzSpec != null) {
- authzSpecs.add(methodAuthzSpec);
- } else if (classAuthzSpec != null) {
- authzSpecs.add(classAuthzSpec);
+ Annotation authzSpec = AnnotationHierarchy.findAnnotation(resourceInfo.getResourceMethod(),
+ resourceInfo.getResourceClass(), annotationClass);
+ if (authzSpec != null) {
+ authzSpecs.add(authzSpec);
}
Review Comment:
We should look closer into this part, malicious libraries might be able to inject code here? Needs a closer look.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "bmarwell (via GitHub)" <gi...@apache.org>.
bmarwell commented on PR #2917:
URL: https://github.com/apache/shiro/pull/2917#issuecomment-6324240888
> New dependency: commons-lang3 in shiro-core.
Sigh, -1. We constantly get nagging iq server and other tools
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on code in PR #2917:
URL: https://github.com/apache/shiro/pull/2917#discussion_r4343989710
##########
core/pom.xml:
##########
@@ -112,6 +112,10 @@
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-lang</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ </dependency>
Review Comment:
Original code was very big without commons-lang, but I was able to strip it to bear necessities and make it concise, maybe 10-15 extra lines, so all good.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "fpapon (via GitHub)" <gi...@apache.org>.
fpapon commented on PR #2917:
URL: https://github.com/apache/shiro/pull/2917#issuecomment-6357656600
Why adding a new support module with "EJB" and people are still using EJB this day?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on code in PR #2917:
URL: https://github.com/apache/shiro/pull/2917#discussion_r4341423807
##########
support/jaxrs/src/main/java/org/apache/shiro/web/jaxrs/ShiroAnnotationFilterFeature.java:
##########
@@ -32,50 +29,33 @@
import jakarta.ws.rs.core.FeatureContext;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import jakarta.annotation.security.DenyAll;
-import jakarta.annotation.security.PermitAll;
-import jakarta.annotation.security.RolesAllowed;
import static org.apache.shiro.web.jaxrs.SubjectPrincipalRequestFilter.SHIRO_WEB_JAXRS_DISABLE_PRINCIPAL_PARAM;
/**
* Wraps {@link AuthorizationFilter filters} around JAX-RS resources that are annotated with Shiro annotations.
+ * Annotations are resolved on the resource method, the resource class, their supertypes and interfaces, and as
+ * meta-annotations, see {@link AnnotationHierarchy#findAnnotation(java.lang.reflect.Method, Class, Class)}.
*
* @since 1.4
*/
public class ShiroAnnotationFilterFeature implements DynamicFeature {
- private static final List<Class<? extends Annotation>> SHIRO_ANNOTATIONS = List.of(
- RequiresPermissions.class,
- RequiresRoles.class,
- RequiresAuthentication.class,
- RequiresUser.class,
- RequiresGuest.class);
-
- private static final List<Class<? extends Annotation>> JSR_250_ANNOTATIONS = List.of(
- RolesAllowed.class, PermitAll.class, DenyAll.class);
-
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
List<Annotation> authzSpecs = new ArrayList<>();
- var annotations = SHIRO_ANNOTATIONS;
+ Collection<Class<? extends Annotation>> annotations = AuthorizationAnnotations.shiroTypes();
if (Boolean.TRUE.equals(context.getConfiguration().getProperty(SHIRO_WEB_JAXRS_DISABLE_PRINCIPAL_PARAM))) {
- annotations = Stream.concat(SHIRO_ANNOTATIONS.stream(), JSR_250_ANNOTATIONS.stream())
- .collect(Collectors.toList());
+ annotations = AuthorizationAnnotations.allTypes();
}
for (Class<? extends Annotation> annotationClass : annotations) {
- // XXX What is the performance of getAnnotation vs getAnnotations?
- Annotation methodAuthzSpec = resourceInfo.getResourceMethod().getAnnotation(annotationClass);
- Annotation classAuthzSpec = resourceInfo.getResourceClass().getAnnotation(annotationClass);
-
- if (methodAuthzSpec != null) {
- authzSpecs.add(methodAuthzSpec);
- } else if (classAuthzSpec != null) {
- authzSpecs.add(classAuthzSpec);
+ Annotation authzSpec = AnnotationHierarchy.findAnnotation(resourceInfo.getResourceMethod(),
+ resourceInfo.getResourceClass(), annotationClass);
+ if (authzSpec != null) {
+ authzSpecs.add(authzSpec);
}
Review Comment:
This was already looked at.
This path only reads annotation metadata via reflection. It never instantiates or invokes anything an annotation refers to. Enforcement handlers come from the fixed registry in AuthorizationAnnotations (the Shiro annotations plus JSR-250 when present). Any other annotation type is ignored by the feature and rejected by AnnotationAuthorizationFilter. All of this already has tests.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] enh: harmonized superclass / interface annotation processing [shiro]
Posted by "lprimak (via GitHub)" <gi...@apache.org>.
lprimak commented on code in PR #2917:
URL: https://github.com/apache/shiro/pull/2917#discussion_r4341382522
##########
core/src/main/java/org/apache/shiro/authz/aop/AuthorizationAnnotations.java:
##########
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.shiro.authz.aop;
+
+import lombok.experimental.UtilityClass;
+import org.apache.shiro.aop.AnnotationResolver;
+import org.apache.shiro.authz.annotation.RequiresAuthentication;
+import org.apache.shiro.authz.annotation.RequiresGuest;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.apache.shiro.authz.annotation.RequiresRoles;
+import org.apache.shiro.authz.annotation.RequiresUser;
+import org.apache.shiro.lang.util.ClassUtils;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
+import java.util.stream.Stream;
+
+/**
+ * The single registry of authorization annotations Shiro understands, with their handlers and method interceptors,
+ * shared by every integration (Spring, Guice, CDI, JAX-RS, AspectJ).
+ * <p>
+ * The five Shiro annotations are always available. The JSR-250 annotations ({@code @RolesAllowed},
+ * {@code @PermitAll}, {@code @DenyAll}) are registered only when {@code jakarta.annotation} is on the class path.
+ *
+ * @since 3.0.2
+ */
+@UtilityClass
+@SuppressWarnings("checkstyle:HideUtilityClassConstructor")
Review Comment:
Done
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@shiro.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org