goja-web/src/main/java/goja/plugins/shiro/ShiroPlugin.java
private AuthzHandler createAuthzHandler(
            List<Annotation> controllerAnnotations,
            List<Annotation> methodAnnotations) {

        //没有注解
        if (controllerAnnotations.size() == 0 && methodAnnotations.size() == 0) {
            return null;
        }
        //至少有一个注解
        List<AuthzHandler> authzHandlers = Lists.newArrayListWithCapacity(5);
        for (int index = 0; index < 5; index++) {
            authzHandlers.add(null);
        }

        // 逐个扫描注解，若是相应的注解则在相应的位置赋值。
        scanAnnotation(authzHandlers, controllerAnnotations);
        // 逐个扫描注解，若是相应的注解则在相应的位置赋值。函数的注解优先级高于Controller
        scanAnnotation(authzHandlers, methodAnnotations);

        // 去除空值
        List<AuthzHandler> finalAuthzHandlers = Lists.newArrayList();
        for (AuthzHandler a : authzHandlers) {
            if (a != null) {
                finalAuthzHandlers.add(a);
            }
        }
        authzHandlers = null;
        // 存在多个，则构建组合AuthzHandler
        if (finalAuthzHandlers.size() > 1) {
            return new CompositeAuthzHandler(finalAuthzHandlers);
        }
        // 一个的话直接返回
        return finalAuthzHandlers.get(0);
    }
private AuthzHandler createAuthzHandler(
            List<Annotation> controllerAnnotations,
            List<Annotation> methodAnnotations) {

        //没有注解
        if (controllerAnnotations.size() == 0 && methodAnnotations.size() == 0) {
            return null;
        }
        //至少有一个注解
        List<AuthzHandler> authzHandlers = Lists.newArrayListWithCapacity(5);
        for (int index = 0; index < 5; index++) {
            authzHandlers.add(null);
        }

        // 逐个扫描注解，若是相应的注解则在相应的位置赋值。
        scanAnnotation(authzHandlers, controllerAnnotations);
        // 逐个扫描注解，若是相应的注解则在相应的位置赋值。函数的注解优先级高于Controller
        scanAnnotation(authzHandlers, methodAnnotations);

        // 去除空值
        List<AuthzHandler> finalAuthzHandlers = Lists.newArrayList();
        for (AuthzHandler a : authzHandlers) {
            if (a != null) {
                finalAuthzHandlers.add(a);
            }
        }
        authzHandlers = null;
        // 存在多个，则构建组合AuthzHandler
        if (finalAuthzHandlers.size() > 1) {
            return new CompositeAuthzHandler(finalAuthzHandlers);
        }
        // 一个的话直接返回
        return finalAuthzHandlers.get(0);
    }
private AuthzHandler createAuthzHandler ( List < Annotation > controllerAnnotations , List < Annotation > methodAnnotations ) { //没有注解 if ( controllerAnnotations . size ( ) == 0 && methodAnnotations . size ( ) == 0 ) { return null ; } //至少有一个注解 List < AuthzHandler > authzHandlers = Lists . newArrayListWithCapacity ( 5 ) ; for ( int index = 0 ; index < 5 ; index ++ ) { authzHandlers . add ( null ) ; } // 逐个扫描注解，若是相应的注解则在相应的位置赋值。 scanAnnotation ( authzHandlers , controllerAnnotations ) ; // 逐个扫描注解，若是相应的注解则在相应的位置赋值。函数的注解优先级高于Controller scanAnnotation ( authzHandlers , methodAnnotations ) ; // 去除空值 List < AuthzHandler > finalAuthzHandlers = Lists . newArrayList ( ) ; for ( AuthzHandler a : authzHandlers ) { if ( a != null ) { finalAuthzHandlers . add ( a ) ; } } authzHandlers = null ; // 存在多个，则构建组合AuthzHandler if ( finalAuthzHandlers . size ( ) > 1 ) { return new CompositeAuthzHandler ( finalAuthzHandlers ) ; } // 一个的话直接返回 return finalAuthzHandlers . get ( 0 ) ; }
依据Controller的注解和方法的注解来生成访问控制处理器。

@param controllerAnnotations Controller的注解
@param methodAnnotations     方法的注解
@return 访问控制处理器
依据Controller的注解和方法的注解来生成访问控制处理器。