Kotlin的访问控制

Kotlin应用访问控制安全实践:防御IDOR与协程并发漏洞 访问控制是Web应用安全的核心防线,其核心原理在于建立和维护清晰的信任边界,防止水平越权、垂直越权等漏洞。在微服务与异步编程成为主流的今天,访问控制的技术价值愈发凸显,它直接关系到业务数据的安全性与系统稳定性。随着Kotlin在Android和后端开发中的广泛应用,其独特的语言特性如协程、数据类、扩展函数等,在提升开发效率的同时,也为访问控制的实现带来了新的挑战与机遇。例如,协程的并发执行可能引入竞态条件,导致“检查-使用”型漏洞;而数据类的便捷性也可能让开发者误将其作为权限判断的唯一依据。本文聚焦于在Ko 阅读详情

 

Kotlin的访问控制分为 限制修饰符 与 可见性修饰符 。

 

限制修饰符

当你想要指定一个类、方法及属性的修改或者重写权限时,你就需要用到限制修饰符。

限制修饰符包括:默认(final)、open、abstract、sealed。由于Kotlin中类、方法及属性默认是final,不可被继承或重写的,所以要继承或重写必须加上open。

Kotlin与Java的限制修饰符比较

限制修饰符Kotlin中含义与Java比较
默认(final)不允许被继承或重写与Java主动指定final的效果一致
open允许被继承或重写相当于Java的默认情况
abstract抽象类或抽象方法与Java一致
sealed若要继承,则需要将子类定义在同一个文件无

 

可见性修饰符

若你想要指定类、方法及属性的可见性,那么就需要可见性修饰符。可见性修饰符包括:public、internal、protected、private。

Kotlin与Java的可见性修饰符比较
可见性修饰符Kotlin中含义

与Java比较

Java访问权限修饰词

publicKotlin中默认修饰符,全局可见与Java中public效果相同
internal模块内可见无
protected受保护修饰符,类及子类可见含义一致,但作用域除了类及子类外,包内也可见
private私有修饰符,类内修饰只有本类可见,类外修饰文件类可见私有修饰类,只有类内可见

 

Kotlin可见性修饰符的声明场景
 顶层声明类中声明接口声明属性声明

主构造函数声明

public√√√如果写上会提示去掉,默认public√
internal√√××√
protected×√××√
private√√可修饰函数,不可修饰变量×√

备注

  • sealed:密封类。Kotlin通过sealed关键字来修饰一个类为密封类,若要继承则需要将子类定义在同一个文件,其他文件中的类将无法继承它。但这种方式有它的局限性,即它不能被初始化,因为它背后是基于一个抽象类实现的。密封类的使用场景有限,它可以看成一种功能更强大的枚举,所以它在模式匹配中可以起到很大的作用。
  • internal:模块内可见。一个模块是编译在一起的一套 Kotlin 文件,可以看作一起编译的Kotlin文件组成的集合:

        1)一个 IntelliJ IDEA 模块;

        2)一个 Maven 项目;

        3)一个 Gradle 源集(例外是 test 源集可以访问 main 的 internal 声明);

        4)一次 <kotlinc> Ant 任务执行所编译的一套文件。

参考 

【Kotlin官方文档】

【Kotlin核心编程-水滴技术团队】

DDR4 IP的用户接口 DDR4 IP核用户接口 阅读详情

相关推荐

前端监控体系:从Sentry到LogRocket错误追踪

Sentry是一款开源的实时错误追踪系统,支持多种语言和框架,包括JavaScript、React、Vue等。它提供了丰富的错误信息、堆栈跟踪和环境数据,帮助开发者快速定位和解决问题。LogRocket是一款前端监控和用户行为分析工具,它提供了视频回放、性能监控、错误追踪等功能。与Sentry不同,LogRocket更注重用户行为的全面分析。前端监控体系是确保应用稳定性和用户体验的重要保障。通过集成Sentry和LogRocket等监控工具,开发者可以实时追踪应用中的错误和用户行为,快速定位和解决问题。

shejizuopin的博客 1313

Kotlin基础教程-包

Packages 一个源文件一般从定义包开始package com.doctorq.packagesfun main(args: Array<String>) { println("Hello World!") }class Foo{}注意这个地方,包名和源文件所在的目录没有直接关系,而编译后的文件会安装定义的包名生成相应的目录默认导入的包 kotlin.* kotlin.annotation

doctorq 2043

HT7036计量芯片SPI通信与数据读取实战解析

本文详细解析HT7036计量芯片的SPI通信与数据读取实战,涵盖SPI时序配置、命令发送、数据读取及常见问题排查。重点介绍如何通过SPI接口与MCU通信,实现电能数据的稳定采集与处理,为智能电表等应用提供实用解决方案。

vscode5coder的博客 264

Kotlin面向对象总结-访问控制原则

在Java中,如果希望一个类被别人继承或者修改,那么可以使用 final来修饰它。可以用 public、private、protected等修饰符来描述一个类、方法或属性的可见性。 Kotlin在默认修饰符的设计上采用了与Java不同的思路。Kotlin相比Java,对一个类、方法或属性有着不一样的访问控制原则。 限制修饰符 指定一个类、方法或属性的修改或者重写权限时,需要用到限制修饰...

且听真言 1023

深信服上网行为管理设备登录方法、恢复出厂、恢复控制台密码

1.初识设备 1.1 设备外观 1.2 软件版本 2.如何登录设备 首次拿到AC/SG设备时,可以通过以下方法登录设备控制台 SANGFOR AC/SG设备,各网口默认的出厂IP为: eth0(LAN):10.251.251.251/24 , eth1(DMZ)10.252.252.252/24 1、使用一根交叉线连接设备和电脑 (1) 如果电脑连接的是设备的eth0口,需先在电脑上配...

✍千里之行,始于足下 ^,^ 5万+

两轮差速小车循线控制原理分析

硬件资料设定:小车驱动来自于两个相同的电机,转向依靠两轮差速实现,小车前后左右安装超声波传感器,前后各一个,左右各两个; 功能目标:假设小车左侧有墙壁,通过超声波测距实现按指定距离沿墙行驶 参数设定:车轮半径r=3cm,车轮间距wd=10cm,车身长length=16cm,侧边超声波传感器前后各一个,假设一个在车头一个在车尾,间距=车身=length=16cm,小车线速度恒定v = 0.2m/s,距离墙d=10cm,假设超声波传感器以10Hz的频率采集距离。 在以上条件下,设定小车出发点,方向与墙平行

aibingjin的博客 1万+

Kotlin笔记 七(三) 包与访问控制符.md

导包 1、封装概念 封装:即将对象状态信息封装在对象内部,不允许外部程序直接访问对象内部信息,而是通过对象暴露的方法实现对内部状态的访问与操作 2、包 Kotlin编译器总是会为源文件中的包结构生成对应的文件目录,而Javac编译期需要-d选项才会生成文件目录; 2.1、导包 Kotlin支持两种方式: 精确导包: import foo.bar//导入foo包中的Bar 和通配符导入 import...

Leslie_LN的博客 1213

Notion访问卡顿?一键优化DNS与Hosts提升加载速度

本文针对Notion访问卡顿问题,提供了两种核心优化方案:修改Hosts文件与配置DNS。详细解析了卡顿根源在于网络链路,并手把手指导用户在Windows、Mac、iOS及Android设备上实施优化,旨在通过替换为更优线路,显著提升Notion的页面加载与同步速度。

fff88的博客 1195

Kotlin-简约之美-进阶篇(四):访问权限控制

默认的访问修饰符 在Kotlin世界中,无任何修饰的class、方法,等等默认就是public的,所以是隐式的 public的class class MyActivity { } public 的方法 fun methord() { } public 的变量 var temp: String? = null public的构造方法 constructor() : super(...

门心叼龙的专栏 8537

CKS-CN考试之路----11

显然是alpine-b的镜像有libcrypto3-3.1.4-r5。新版本发布老版本会被回收,此时pod只剩下2个container。我们依次测试是哪个镜像里包含libcrypto3。可以看到alpine的pod有3个副本.

Q先生 652

2026从0到1!C#工控机开发实战指南:新手一周就能跑通的完整项目

这篇文章摘要如下: 工业自动化领域工控机开发入门指南,针对零基础开发者提供从环境搭建到项目实战的全流程指导。文章首先解答工控机开发的3个核心问题,比较工控机与普通PC的区别,推荐使用C#作为开发语言。随后详细讲解开发环境配置、四大核心技术栈(通信协议、数据库、UI框架、多线程),并重点演示Modbus TCP通信的实现。最后通过一个完整的温度监控系统项目实战,展示如何用WPF构建实时数据采集界面,包括Modbus通信类编写、数据采集服务实现等关键代码片段。全文采用图解+代码的方式,帮助开发者快速掌握工控系统

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 702

Kotlin -- 访问控制修饰符

Kotlin – 访问控制修饰符 public by default   和Java一样,在Kotlin中拥有public、protected、private修饰符,作用也和Java几乎一样,与Java不同的是,在Kotlin中,类的声明默认是public的。   在kotlin中,还增加了一层访问控制,就是internal修饰符,被internal修饰的类意味着只在模块中可见。模块是K...

Sino_Crazy_Snail的小窝 4232

CQE和SQE 以及 PQA和DQA的区别

‌:PQA聚焦产品全生命周期流程管理,DQA专注于设计阶段的质量控制。

a1809032425的博客 1902

权限管理 | 用Kotlin实现KMP鸿蒙访问控制

本文介绍了在Kotlin Multiplatform(KMP)项目中实现权限管理的完整方案。通过Kotlin编译为JavaScript并在OpenHarmony的ArkTS中调用,详细展示了用户信息管理、角色定义、权限分配和访问控制等核心功能。文章包含Kotlin源代码和ArkTS调用示例,对比了RBAC、ABAC等不同角色模型,分析了密码认证、生物识别等认证方式,并探讨了读/写/删除/管理等权限类型。最后总结了KMP权限管理在企业应用、数据保护等场景中的应用价值,以及如何实现高效安全的权限控制机制。

safdj9652的博客 698

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

关于kotlin使用TheRouter传值出现private访问控制

发生原因 kotlin开发的class类中定义了一个变量, kotlin默认是public修饰,但是通过AS自带工具查看kotlin编译后的代码会发现全变成了private (Tools -> Kotlin -> ShowKotlinBytecode),就导致TheRouter框架在build生成的代码认为我们的变量是private无法访问 这边提一嘴 open是代表可以被继承和java的final反的,跟访问权限没关系 解决办法 在变量名上加上注解@JvmField

fw920802的博客 294

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

从 internal 修饰符一探 kotlin 的可见性控制

之前探讨过的和存在module的限制,但其主要用于密封 class 的扩展和 interface 的实现。如果没有这个需求只需要限制 module 的话,使用 Kotlin 中独特的internal修饰符即可。本文将详细阐述 internal 修饰符的特点、原理以及 Java 调用的失效问题,并以此为切入点网罗 Kotlin 中所有修饰符,同时与 Java 修饰符进行对比以加深理解。internal 修饰符open 修饰符default、private 等修饰符针对扩展函数的访问控制。

allisonchen的专栏 3183

Kotlin(十二)之java调用Kotlin

文章目录属性函数实例变量静态变量与静态方法访问控制KClass函数签名冲突重载checked异常泛型 属性 Kotlin可以自动识别Java中的getter/setter,如果Java类只有一个setter,那么它在Kotlin中不会作为属性可见,因为Kotlin目前不支持只写(set-only)属性 在Java中可以过getter/setter操作Kotlin属性。如果属性名以is开头(属...

jannal专栏 925

Kotlin的隐藏和封装

封装是面向对象的三大特征之一(另外两个特征是继承和多态)。 封装是面向对象编程语言对客观世界的模拟。对一个类或对象实现良好的封装,可以实现以下目的: 隐藏类的实现细节; 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入控制逻辑,限制对属性的不合理访问。 可进行数据检查,从而有利于保证对象信息的完整性。 便于修改,提高代码的可维护性。 为了实现良好的封装,需要从两个方面考虑...

weixin_45365889的博客 1312

Kotlin 中的 Getter 和 Sette

如果您是 Kotlin 的新手,这个话题可能有点令人困惑。让我们分解一下。 在 OOP 世界中,我们在类中构建我们的代码并创建对象,以便我们可以拥有更多可重用和更易读的代码。在类内部,我们有fields和properties。 很少,我们不应该在类之外公开我们的字段,相反,我们应该用属性封装,并可能在属性内添加一些轻量级的逻辑。不建议在属性内部使用繁重的逻辑。 ...

mn422533的博客 340

kotlin 中 default,public,final,open, protected,private,internal 关键字

default,public,final,open, protected,private,internal

u014105655的博客 1379

Kotlin学习(五):kotlin类详解进阶,三面美团Android岗

【Android开发核心知识点笔记】【Android思维脑图(技能树)】【Android核心高级技术PDF文档,BAT大厂面试真题解析】【Android高级架构视频学习资源】// 枚举比较大小 按照序号比较// 使用扩展方法获取下一个// 枚举的区间八、密封类sealed class1.密封类概念密封类是一种特殊的抽象类密封类的子类定义在与自身相同的文件中密封类的子类个数是有限的密封类构造器是私有的,子类只能写在同一个文件夹里面密封类构VS枚举类。

m0_57502067的博客 992

java类无法调用值,Kotlin无法调用到Java中定义的interface类的问题记录

问题产生原因概述一个kotlin类,调用一个Java类中的一个方法。引发了下面这个错误。因为我在kotlin中调用了了java代码中定义的一个接口,然后就报错一个IllegalAccessError错误。如下:E/AndroidRuntime: FATAL EXCEPTION: mainProcess: test.juyoufuli.com.myapplication, PID: 19866jav...

weixin_31025595的博客 942

kotlin学习笔记之二:类相关

年前看boss直聘,很多安卓开发岗位需要熟练kotlin开发,为了年后找工作和以后开发效率提升,春节假期开始了kotlin的学习,主要教材是《Kotlin 实战》kotlin in action这本书,这里是第四章内容的回忆和笔记整理。26、默认方法在kotlin中起作用,因为 kotlin1.0 面向 java6 开发,所以java类实现kotlin接口时,需要重写所有方法(包含默认...

weixin_33796205的博客 122

Kotlin-访问权限控制

在Kotlin中有四个可见性修饰符,分别是: private、protected、internal 和 public。有了访问控制,我们就可以更加明确地表示哪些内容是可以访问的,而哪些是内部使用的。在类、对象、接口、函数以及属性上可以为其添加 可见性修饰符 来控制其可见性。

2302_77179144的博客 558

Kotlin学习笔记3-4 类和对象-访问限制

Kotlin学习笔记3-4 Classes and Objects:Visibility Modifiers 类和对象:访问限制

hohoho get it up 1066

Kotlin 集合循环及对象

前面讲了For循环,遍历时,语法如下 : for (i in collection) { print(i) } ,这是一个代码块,具体的比如说 val ints = arrayOf(1, 4, 5) for (i : Int in ints) { // …… } 在这个地方, ints 是数字类型的数组,for 循环中可以写明白它的类型;上面的写法,...

Deaht_Huimie的博客 2471
上一篇: git命令聚集地
下一篇: TV按键拦截问题
Swuagg
Swuagg 新星创作者: 移动开发技术领域 新星创作者: 移动开发技术领域 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄10年 2355粉丝 153原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值