细粒度与粗粒度授权策略及其在Mybatis中的应用

需积分: 46 16 下载量 122 浏览量 更新于2024-08-07 收藏 9.62MB PDF 举报
"本文主要讨论了粗颗粒和细颗粒授权的策略以及Mybatis中#和$的区别,同时还提及了一些Java基础知识,包括面向对象、语法特性、重载与重写等概念。" 在授权管理中,粗颗粒和细颗粒授权是两种不同的权限控制方式。粗颗粒授权通常用于系统级别的功能控制,它简化了权限管理,通过统一的权限设置来限制用户对整个系统或大功能模块的访问。例如,可以设定用户是否有权进行数据备份或系统配置等操作。这种授权方式通常在系统架构层面实现,通过过滤器等手段统一拦截URL,对用户的操作进行全局控制。 相比之下,细颗粒授权则关注于数据级别的控制,它更灵活且适应业务需求的变化。由于业务需求可能会频繁变动,导致对数据的操作权限也需要随之调整,因此细颗粒授权建议在业务层实现,比如在service接口中添加校验逻辑。例如,用户只能修改自己创建的商品信息,这就需要在服务接口中传入当前操作人的标识,与商品的创建人标识对比,如果不一致则拒绝修改操作。 在Mybatis中,#和$是两种不同的占位符。#{}使用时会将传入的数据自动加上双引号,相当于预编译处理,可以防止SQL注入,例如`order by #user_id#`。而${}则是直接将传入的数据拼接在SQL字符串中,没有预编译的安全性,如`order by $user_id$`。 此外,文件中还提到了一些Java基础知识点,包括: 1. 面向对象的特性,如封装、继承、多态,以及对这些特性的理解。 2. 访问权限修饰符public、private、protected以及默认的区别,它们决定了类成员的可见性和可访问性。 3. Java中的克隆对象,如何通过`clone()`方法复制对象。 4. Java中的逻辑运算符`&`和`&&`的区别,前者始终会评估两边的操作数,后者(短路与)在左操作数确定结果后就不再评估右操作数。 5. 跳出多重嵌套循环的几种方法,如使用`break`或`return`。 6. `equals()`和`hashCode()`的关系,以及为何两个对象值相等但`hashCode()`可能不同。 7. 是否可以继承`String`类,以及Java中对象传递的性质——总是按引用传递。 8. 重载(方法名相同但参数列表不同)和重写(子类覆盖父类方法)的区别,以及重载不依赖返回类型的原因。 9. `char`类型的存储范围,能否存储中文汉字及其原因。 10. 抽象类(`abstract class`)与接口(`interface`)的异同,包括抽象方法、静态方法、本地方法(native)和`synchronized`关键字的使用场景。 11. 静态变量和实例变量的差异,主要体现在生命周期、作用域和与类或对象的关系上。 12. `==`和`equals()`方法的区别,`==`比较的是变量引用,而`equals()`通常比较对象的内容。 这些知识点涵盖了Java编程的基础和一些进阶概念,对于Java开发者来说,理解和掌握这些内容有助于提升编程技能和解决实际问题的能力。