抽象类通过编译期强制校验契约、构造器统一管控、final模板方法固化流程顺序及分层防护机制,确保权限判断等前置逻辑不可绕过。

抽象类通过定义强制性的校验入口和不可绕过的执行骨架,把权限判断、参数校验、安全上下文初始化等前置逻辑“卡”在对象生命周期早期,让所有子类必须遵守统一规范,避免校验被跳过或弱化。
用抽象方法声明校验契约,编译期强制实现
在抽象基类中声明 abstract boolean checkPermission() 或 abstract void validateRequest(Request req)。子类继承时必须重写该方法,否则无法编译通过。这比运行时反射检查更早暴露问题——不是“忘了加”,而是“加不了”。
- 校验逻辑由子类按具体场景定制(如订单服务校验用户+订单归属,支付服务额外校验风控状态)
- 但入口统一、调用时机统一,确保每条业务链路都经过权限关口
- 配合构造器调用:
public AbstractService() { if (!checkPermission()) throw new SecurityException("权限不足"); }
用 final 模板方法固化拦截流程顺序
把前置拦截拆成标准阶段:身份识别 → 权限判定 → 请求净化 → 防重放/防篡改 → 上下文准备。用 final 方法封装流程骨架,只留抽象钩子供子类填充细节。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
final Response handle(Request req) { identifyUser(req); checkPermission(); sanitizeInput(req); preventReplay(req); prepareContext(); return doBusinessLogic(req); }- 子类只能重写
checkPermission()和doBusinessLogic(),不能跳过或重排preventReplay() - 天然防止“先执行业务再校验”这类高危错误
在构造器中集中管控敏感依赖与默认策略
所有子类实例化时,必须走抽象父类的构造器。这是统一注入安全组件、设定默认行为的唯一入口。
- 强制传入
AuthManager、RateLimiter等依赖,不许子类自行 new 或硬编码 - 设置默认超时、重试次数、日志级别等公共属性,减少重复代码
- 校验构造参数合法性(如 token 不为空、租户 ID 格式正确),非法则直接抛异常,不生成半成品对象
结合注解与抽象层做分层防护
抽象类负责通用、强约束的底层拦截(如登录态、签名验真、基础角色),上层再叠加注解驱动的细粒度控制(如 @RequirePermission("ORDER_DELETE"))。
- 抽象类做“兜底”:没登录?拒绝;签名错?拒绝;时间戳超5分钟?拒绝
- 注解做“精准”:当前用户是否有删除权限?由 PermissionService 动态查库或缓存决定
- 两者不冲突——抽象层保障底线安全,注解支持业务灵活授权
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










