复用公共安全校验代码的核心思路是将通用校验逻辑提取至父类,子类通过继承调用或重写实现复用与定制;父类提供protected/public校验方法,支持登录态、权限、参数合法性检查,配合模板方法与合理访问控制提升可维护性。

Java 继承机制中,复用公共的安全校验代码的核心思路是:把通用校验逻辑(如登录态检查、权限验证、参数合法性判断等)统一提取到父类中,子类通过继承直接调用,避免在每个业务类里重复写校验逻辑。
把安全校验封装进基类
定义一个抽象或普通父类(比如 BaseService 或 SecureController),将校验方法作为 protected 或 public 方法提供:
- 校验用户是否已登录(检查 token 或 session)
- 校验当前操作者是否有某项权限(如 checkPermission("user:delete"))
- 校验请求参数是否为空、越界、含非法字符等
这些方法在父类中实现一次,所有子类自动获得能力,无需复制粘贴。
子类按需调用或定制校验流程
子类可在关键入口(如 service 方法开头)直接调用父类校验方法;也可重写父类的某个校验方法,补充特定规则:
- 例如父类提供
validateCommonParams(),子类重写它,在原有基础上加字段格式校验 - 使用
super.validate()先执行通用逻辑,再追加业务专属校验 - 配合注解 + AOP 是更高级的做法,但继承方式更轻量、更直观,适合中小项目或核心模块快速落地
注意访问控制与可扩展性
校验逻辑中的敏感字段(如用户角色、token 解析结果)建议用 protected 字段或 getter 暴露,既保证子类可访问,又不破坏封装:
- 避免把校验方法设为 private —— 子类无法复用或覆盖
- 不要把校验硬编码在子类构造器里 —— 违反开闭原则,难以统一升级
- 若校验策略差异大,可考虑用模板方法模式:父类定义
doValidate()模板,子类实现具体逻辑
实际效果示例
比如多个 Controller 都要校验“用户是否为管理员”:
- 原来每 Controller 写一遍
if (!currentUser.isAdmin()) throw new AccessDeniedException(); - 现在只需继承
AdminOnlyController,并在方法里调checkAdmin()—— 一行调用,零重复 - 后续调整管理员判定逻辑(如增加租户隔离),只改父类一处即可生效全部子类
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











