You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@shiro.apache.org by Peter McNeil <pe...@mcneils.net> on 2013/09/18 06:32:17 UTC
spring AuthorizationAttributeSourceAdvisor
G'day all,
I'm maintaining the Grails Shiro plugin, and in re-writing tests around
Annotations I discovered a problem mentioned several times about spring
integration with the Shiro Annotations, namely that they don't work on a
class as documented.
I tracked the problem to the
org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor,
which only checks the method for the annotation, but not the class. I
implemented a replacement AuthorizationAttributeSourceAdvisor which
overrides the matches method as below. This works as expected in my tests.
public class AuthorizationAttributeSourceAdvisor extends
org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor
{
@Override
public boolean matches(Method method, Class targetClass) {
return ((method.getAnnotation(RequiresPermissions.class) !=
null) ||
(method.getAnnotation(RequiresRoles.class) != null) ||
(method.getAnnotation(RequiresUser.class) != null) ||
(method.getAnnotation(RequiresGuest.class) != null) ||
(method.getAnnotation(RequiresAuthentication.class) !=
null) ||
(targetClass.getAnnotation(RequiresPermissions.class) != null) ||
(targetClass.getAnnotation(RequiresRoles.class) != null) ||
(targetClass.getAnnotation(RequiresUser.class) != null) ||
(targetClass.getAnnotation(RequiresGuest.class) != null) ||
(targetClass.getAnnotation(RequiresAuthentication.class) != null));
}
}
Is this right? Have I missed anything? Does it need to be patched in Shiro?
Cheers,
Peter.
--
web: http://nerderg.com
Twitter: http://twitter.com/pmcneil
Google+: https://plus.google.com/u/0/communities/110661434396927001866