精华内容
下载资源
问答
  • protected

    千次阅读 2018-05-31 17:57:07
    protected:与private相似: 类外只能用公有成员访问protected成员。区别:在子类中体现,子类成员可访问基类protected成员,但不能访问private成员。

    protected:

    private相似:

     类外只能用公有成员访问protected成员。

    区别:

    在子类中体现,子类成员可访问基类protected成员,但不能访问private成员。

    展开全文
  • protected virtual void OnPublish(Book book, DateTime publishTime) { Console.WriteLine( $"{Name} published {book.BookName()} at " + $"{publishTime.ToString("yyyy-MM-dd")}."); Console.WriteLine...
  • C++Protected介绍

    2019-01-17 14:06:44
    编程思想的第十四章,代码,本人亲测通过后才上传的 这段代码 介绍的 是 C++的Protected
  • public protected private

    万次阅读 2019-03-14 21:22:47
    protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protected 继承 private 继承 组合结果 基类中 继承方式 子类中 public & public继承 =&gt...

    三种访问权限

    public:可以被任意实体访问

    protected:只允许子类及本类的成员函数访问

    private:只允许本类的成员函数访问

     

    三种继承方式

    public 继承

    protected 继承

    private 继承

     

    组合结果

    基类中 继承方式 子类中

    public & public继承 => public

    public & protected继承 => protected

    public & private继承 = > private

     

    protected & public继承 => protected

    protected & protected继承 => protected

    protected & private继承 = > private

     

    private & public继承 => 子类无权访问

    private & protected继承 => 子类无权访问

    private & private继承 = > 子类无权访问

     

    由以上组合结果可以看出

    1、public继承不改变基类成员的访问权限

    2、private继承使得基类所有成员在子类中的访问权限变为private

    3、protected继承将基类中public成员变为子类的protected成员,其它成员的访问 权限不变。

    4、基类中的private成员不受继承方式的影响,子类永远无权访问。

    展开全文
  • 问题描述:SpringBoot连接Redis服务出现DENIED Redis is running in protected mode because protected mode is enabled 解决方法:是说Redis服务处于保护模式,我们需要修改配置文件redis.conf。将NETWORK下的...

    问题描述:SpringBoot连接Redis服务出现DENIED Redis is running in protected mode because protected mode is enabled

     解决方法:是说Redis服务处于保护模式,我们需要修改配置文件redis.conf。将NETWORK下的protected-mode yes修改

    protected-mode no,然后重启服务(./bin/redis-server ./redis.conf)

    展开全文
  • 请支持原创~~ 相关博文: Android基础总结之五:BroadcastReceiver Android 中broadcast 注册过程解析 Android 中broadcast 发送过程解析 protected-broadcast 规范使用(ERROR: Sending non-protected broadcast) 先...

    请支持原创~~

     

    相关博文:

    Android基础总结之五:BroadcastReceiver

    Android 中broadcast 注册过程解析

    Android 中broadcast 发送过程解析

    protected-broadcast 规范使用(ERROR: Sending non-protected broadcast)

    先来看下log:

    11-05 00:00:09.609   688  3933 W ContextImpl: Calling a method in the system process without a qualified user: android.app.ContextImpl.sendBroadcast:966 com.android.server.pm.PackageManagerService.sendPermissionAccessBroadcast:5429 com.android.server.pm.PackageManagerService.checkUidPermission:5436 android.app.ActivityManager.checkUidPermission:3981 com.android.server.am.UidRecord.updateHasInternetPermission:113 
    11-05 00:00:09.610   688  3933 E ActivityManager: Sending non-protected broadcast action_shift_permission_access_log from system 688:system/1000 pkg android
    11-05 00:00:09.610   688  3933 E ActivityManager: java.lang.Throwable
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.checkBroadcastFromSystem(ActivityManagerService.java:19280)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.broadcastIntentLocked(ActivityManagerService.java:19885)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.broadcastIntent(ActivityManagerService.java:20027)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at android.app.ContextImpl.sendBroadcast(ContextImpl.java:970)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.pm.PackageManagerService.sendPermissionAccessBroadcast(PackageManagerService.java:5429)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.pm.PackageManagerService.checkUidPermission(PackageManagerService.java:5436)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at android.app.ActivityManager.checkUidPermission(ActivityManager.java:3981)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.UidRecord.updateHasInternetPermission(UidRecord.java:113)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.addProcessNameLocked(ActivityManagerService.java:6910)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.newProcessRecordLocked(ActivityManagerService.java:12517)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3791)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:3706)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.BroadcastQueue.processNextBroadcast(BroadcastQueue.java:1359)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.finishReceiver(ActivityManagerService.java:20131)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:283)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2971)
    11-05 00:00:09.610   688  3933 E ActivityManager: 	at android.os.Binder.execTransact(Binder.java:697)

    这是我在一次开发中出现的,系统中需要发送一个应用自定义的广播,send 之后会报出Sending non-protected broadcast 的异常。

    借此机会来解析protected broadcast 的使用,我们在 Android 中broadcast 发送过程解析 中了解了broadcast 发送的整个过程,通过Context 的接口最终会调用到AMS 中broadcastIntent()。

    1、protected broadcast 必须要特殊uid

            if (!isCallerSystem) {
                if (isProtectedBroadcast) {
                    String msg = "Permission Denial: not allowed to send broadcast "
                            + action + " from pid="
                            + callingPid + ", uid=" + callingUid;
                    Slog.w(TAG, msg);
                    throw new SecurityException(msg);
    
                }

    这段code 比较简单,如果isProtectedBroadcast 为true,即该广播为protected broadcast,那么变量isCallerSystem 不能为false。即,要求如果是protected broadcast 必须要特殊的uid,不然会丢出SecurityException,这特殊uid 指的是:

            switch (UserHandle.getAppId(callingUid)) {
                case ROOT_UID:
                case SYSTEM_UID:
                case PHONE_UID:
                case BLUETOOTH_UID:
                case NFC_UID:
                    isCallerSystem = true;
                    break;
                default:
                    isCallerSystem = (callerApp != null) && callerApp.persistent;
                    break;
            }

    ROOT_UID、SYSTEM_UID、PHONE_UID、BLUETOOTH_UID、NFC_UID 或者是persistent 的app都可以让变量isCallerSystem 为true,躲开这个SecurityException。

    2、如果通过系统发送广播,广播必须是protected broadcast

                if (isCallerSystem) {
                    checkBroadcastFromSystem(intent, callerApp, callerPackage, callingUid,
                            isProtectedBroadcast, registeredReceivers);
                }
        private void checkBroadcastFromSystem(Intent intent, ProcessRecord callerApp,
                String callerPackage, int callingUid, boolean isProtectedBroadcast, List receivers) {
            if ((intent.getFlags() & Intent.FLAG_RECEIVER_FROM_SHELL) != 0) {
                // Don't yell about broadcasts sent via shell
                return;
            }
    
            final String action = intent.getAction();
            if (isProtectedBroadcast
                    || Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
                    || Intent.ACTION_DISMISS_KEYBOARD_SHORTCUTS.equals(action)
                    || Intent.ACTION_MEDIA_BUTTON.equals(action)
                    || Intent.ACTION_MEDIA_SCANNER_SCAN_FILE.equals(action)
                    || Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS.equals(action)
                    || Intent.ACTION_MASTER_CLEAR.equals(action)
                    || Intent.ACTION_FACTORY_RESET.equals(action)
                    || AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)
                    || AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)
                    || LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION.equals(action)
                    || TelephonyIntents.ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE.equals(action)
                    || SuggestionSpan.ACTION_SUGGESTION_PICKED.equals(action)
                    || AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION.equals(action)
                    || AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION.equals(action)) {
                // Broadcast is either protected, or it's a public action that
                // we've relaxed, so it's fine for system internals to send.
                return;
            }
    
            // This broadcast may be a problem...  but there are often system components that
            // want to send an internal broadcast to themselves, which is annoying to have to
            // explicitly list each action as a protected broadcast, so we will check for that
            // one safe case and allow it: an explicit broadcast, only being received by something
            // that has protected itself.
            if (receivers != null && receivers.size() > 0
                    && (intent.getPackage() != null || intent.getComponent() != null)) {
                boolean allProtected = true;
                for (int i = receivers.size()-1; i >= 0; i--) {
                    Object target = receivers.get(i);
                    if (target instanceof ResolveInfo) {
                        ResolveInfo ri = (ResolveInfo)target;
                        if (ri.activityInfo.exported && ri.activityInfo.permission == null) {
                            allProtected = false;
                            break;
                        }
                    } else {
                        BroadcastFilter bf = (BroadcastFilter)target;
                        if (bf.requiredPermission == null) {
                            allProtected = false;
                            break;
                        }
                    }
                }
                if (allProtected) {
                    // All safe!
                    return;
                }
            }
    
            // The vast majority of broadcasts sent from system internals
            // should be protected to avoid security holes, so yell loudly
            // to ensure we examine these cases.
            if (callerApp != null) {
                Log.wtf(TAG, "Sending non-protected broadcast " + action
                                + " from system " + callerApp.toShortString() + " pkg " + callerPackage,
                        new Throwable());
            } else {
                Log.wtf(TAG, "Sending non-protected broadcast " + action
                                + " from system uid " + UserHandle.formatUid(callingUid)
                                + " pkg " + callerPackage,
                        new Throwable());
            }
        }

    通过code 可以看到这个标题不是很正确,条件要求该广播除了是protected broadcast,也可以是:

                    || Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
                    || Intent.ACTION_DISMISS_KEYBOARD_SHORTCUTS.equals(action)
                    || Intent.ACTION_MEDIA_BUTTON.equals(action)
                    || Intent.ACTION_MEDIA_SCANNER_SCAN_FILE.equals(action)
                    || Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS.equals(action)
                    || Intent.ACTION_MASTER_CLEAR.equals(action)
                    || Intent.ACTION_FACTORY_RESET.equals(action)
                    || AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)
                    || AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)
                    || LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION.equals(action)
                    || TelephonyIntents.ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE.equals(action)
                    || SuggestionSpan.ACTION_SUGGESTION_PICKED.equals(action)
                    || AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION.equals(action)
                    || AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION.equals(action)

    这里标题之所以这样标注,主要是为了突出protected(保护),指的是对于普通的广播进行的保护。

    上面code 看到除了code 中指定的这些特殊的action,以及系统AndroidManifest.xml 中特殊规定的protected broadcast(详见framewors/base/core/res/AndroidManifest.xml):

        <protected-broadcast android:name="android.intent.action.SCREEN_OFF" />                             
        <protected-broadcast android:name="android.intent.action.SCREEN_ON" /> 

    通过code 知道如果想不抛出 exception,那变量allProtected 必须为true 并返回,那对于普通的广播要求:

    • 必须指明package
            if (receivers != null && receivers.size() > 0
                    && (intent.getPackage() != null || intent.getComponent() != null)) {

    要求广播发送的package 必须指出来,或者直接将package 、class 做成component 。

    • 静态广播的exported为true的时候必须同时加上permission限制
            if (ri.activityInfo.exported && ri.activityInfo.permission == null) {
                allProtected = false;
                break;
            }
    

    要求exported 为true的时候,必须有permission 进行限制。

    如果exported 为false,那当然不会有影响。

    • 动态广播的filter 中必须指定permission
            BroadcastFilter bf = (BroadcastFilter)target;
            if (bf.requiredPermission == null) {
                allProtected = false;
                break;
            }
    

    综合,对于不是系统中指定的广播,需要要满足上面3个条件,这就是标题中说到的保护。

    总结:

    • protected 广播必须是特殊uid 才能发送
    • 系统发送的广播如果是protected 广播,可以正常发送
    • 系统code 中的特殊广播,可以正常发送
    • 对于静态注册的普通广播,要求exported为true 的时候必须指定广播要求的permission进行限制
    • 对于动态注册的普通广播,要求广播必须指定permission
    • 对于普通广播,在满足上面3、4点要求的同时,该广播的package 或者component 必须指定

    展开全文
  • 主要介绍了Swift中的访问控制和protected,本文主要讲解为什么Swift没有类似protected的选项,需要的朋友可以参考下
  • 您可以将它们视为attr_protected和attr_accessible的控制器类似物。 安装 Rails的2.3.x版本 gem install param_protected -v "~> 1.0.0" Rails的3.0.x中 gem "param_protected" , "~> 2.0.0" 感谢提供了Rails 3...
  • RabbitSys Protected Operating Systempdf,RabbitSys Protected Operating System
  • Ruby类下对访问控制的限制也是用public,protected和private来做的。虽然用的是和C++和Java相同的名字,但是Ruby下的protected和private定义还是有所不同的。
  • protected:保护成员 int sex; }; 三、类的属性public、private和protected 类的public成员可以被任意实体访问,你可以认为它就是c语言中的struct结构体,可以直接用a.x这种形式访问; 类的private成员不能直接
  • protected:自己与派生类可以访问; internal:同一个程序集可以访问; protected internal:自己与派生类可以反问 同时 同一个程序集也可以访问。即 protected internal 是 protected 与 internal的总和。
  • Java protected关键字

    千次阅读 2019-04-23 20:59:41
    在Java中,经常想要把某些自定义的类尽可能隐藏起来,但仍然允许导出类的成员访问它,就提到了protected修饰关键字,它指明“就类用户而言,这是private的,但是对于任何继承于此类的导出类或者其他任何位于同一个包...
  • 三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 ...protectedprotected继承 => protected protecte
  • protected,internal和protected internal

    千次阅读 2010-04-08 12:33:00
    我03年开始搞C#,搞了好多年了,楞是没搞出什么名堂。其中是有原因的,水平太烂。好比面向对象里非常基本的...但事实上,protected不管在基类还是子类,永远都是protected。另外,internal这个访问级别原本不知道有
  • 初学C++的朋友经常在类中看到public,protected,private以及它们在继承中表示的一些访问范围,很容易搞糊涂。今天本文就来十分分析一下C++中public、protected及private用法。相信对于大家深入掌握C++程序设计会有...
  • 从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“内部”的其他函数可以调用之。而对于private的函数,只能被本类“内部”的其他函数...
  • protected 构造方法

    2019-10-10 22:20:11
    使用protected 构造方法,是包保护措施,出了这个包,在别的包里面是不可以new这个对象的。 假设classA 的构造函数是protected的,如果在别的包里还想用我这个类的功能,只能是用该类的子类了:创建一个子类B ...
  • Redis protected-mode 参数分析

    千次阅读 2020-02-09 01:36:07
    Redis3.2版本后新增protected-mode配置,默认是yes,即开启。protected-mode设置为不同值时的效果如下: protected-mode值 效果 no 关闭protected-mode模式,此时外部网络可以直接访问 yes 开启protected-...
  • NCP3712ASNT1-D Overvoltage Protected High Side Switch
  • protected(受保护的)被声明为protected的成员,只允许该类的子类进行访问。private(私有的 ) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许访问。 图解demo复制代码 代码...
  • DENIED Redis is running in protected mode because protected mode is enabled ……   通过客户端(包括redis-cli或jedis等方式)连接Redis实例时,出现如下错误,说明Redis服务的配置需要调整,即Redis开启了...
  • (error) DENIED Redis is running in protected mode because protected mode is enab led, no bind address was specified, no authentication password is requested to c lients. In this mode connections are
  • This paper investigates the problem of dynamic protected lightpath services provisioning in optical mesh networks employing wavelength division multiplexing (WDM). A variety of schemes for dynamic ...
  • IETF Protected EAP Protocol

    2014-11-05 13:50:56
    Protected EAP Protocol (PEAP) Version 2.txt
  • protected访问权限

    千次阅读 2019-10-04 12:29:04
    对于protected修饰符,它主要的作用就是用来保护子类的。它的含义在于子类可以使用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西 ...
  • java protected详解

    2018-11-26 14:23:52
    Java中protected方法访问权限的问题 先看Test.java   此时出现上文提到的错误:The method clone from the type Object is not visiuable. 我们已经清楚Object.clone()是protected方法。这说明,该方法可以...
  • 关于protected成员

    千次阅读 2016-06-16 13:59:28
    protected是介于private和public之间的一种访问权限: * 像private成员一样,protected成员不能被类的用户访问; * 像public成员一样,protected成员可被该类的派生类访问。 * 派生类只能通过派生类对象访问其基类的...
  • protected 修饰符的使用

    2018-10-19 22:49:31
    protected 修饰符 protected 修饰符用来修饰成员变量,成员方法,构造方法。protected所修饰的只能通过同一个包下、不同包的子类、匿名内部类的方式访问,代码如下: 定义一个Student类 package cn.huaqi.base; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,642,659
精华内容 657,063
关键字:

protected