本文是第六篇的修正版。因为在上一篇结尾,我其实对扩展方案是不太满意的,所以,今天,我重新做一个扩展,本次将注解的类名改成 @RequiresAction。
@RequiresAction("cn.sharetop.example.HelloController:addUser")
首先,也是定义这个注解 RequiresAction,除了名字换一下以外,其实与上篇是一样的。
然后,我们需要修改Advisor,这次我们拿Shiro自己的AuthorizationAttributeSourceAdvisor来稍事修改,增加对新注解的支持,相对于上次我们继承这个类,覆盖matches方法,获取类名及方法名拼装权限字串,一堆事儿。这次我们的修改量明显少了许多。代码如下:
public class AuthorizationAttributeSourceAdvisor extends StaticMethodMatcherPointcutAdvisor {
private static final Class<? extends Annotation>[] AUTHZ_ANNOTATION_CLASSES =
new Class[] {
RequiresPermissions.class, RequiresRoles.class,
RequiresUser.class, RequiresGuest.class, RequiresAuthentication.class,
RequiresAction.class
};
//其