Java面试要点:登录、Token、RBAC权限模型与风控
前言
用户与权限是企业系统的基础能力。面试里经常问:
- 登录状态怎么保持。
- Token 和 Session 有什么区别。
- RBAC 怎么设计。
- 菜单权限、按钮权限、接口权限怎么统一。
- 单点登录怎么做。
- 风控和验证码什么时候介入。
这类题目考的不是背定义,而是你能不能把“身份认证、权限授权、风控拦截、会话管理”这四件事拆清楚。
登录系统的基本链路
sequenceDiagram
participant U as 用户
participant G as 网关
participant A as 认证服务
participant R as Redis
participant S as 业务服务
U->>G: 登录请求
G->>A: 转发用户名密码/验证码
A->>A: 校验账号与风控
A->>R: 写入会话或 Token 黑名单
A-->>U: 返回 Token
U->>G: 携带 Token 访问业务
G->>S: 鉴权通过后转发
企业里的登录系统一般不只是“用户名密码校验”,还会加:
- 验证码。
- 短信/邮箱 OTP。
- 设备指纹。
- 登录失败次数限制。
- 异常 IP 风控。
- Token 刷新和注销。
Session 和 Token
Session 方案
登录成功后,服务端保存会话,客户端保存 SessionId。
优点:
- 服务端可控。
- 注销方便。
- 传统系统实现简单。
缺点:
- 分布式部署时要做 Session 共享或粘性会话。
- 扩容麻烦。
适合:
- 传统后台系统。
- 浏览器为主的应用。
Token 方案
登录成功后,服务端签发 Token,客户端每次请求携带 Token。
优点:
- 服务端无状态或弱状态。
- 适合微服务和移动端。
- 扩展性好。
缺点:
- 注销和失效管理更复杂。
- Token 泄漏风险更高。
适合:
- 前后端分离。
- 多端接入。
- 微服务体系。
对比
| 方案 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| Session | 简单、直观、易注销 | 分布式共享复杂 | 传统 Web |
| Token | 无状态、扩展性好 | 失效管理复杂 | API、移动端、微服务 |
面试回答建议:
小系统或传统 Web 用 Session 足够;前后端分离和微服务更常用 Token。真正落地时常常是 Token + Redis 做登录态管理和黑名单控制。
JWT 怎么看
JWT 是一种 Token 载体格式,常用于承载用户身份和权限声明。
优点:
- 自包含。
- 可跨服务传递。
- 验签后可快速识别身份。
缺点:
- 一旦签发不易主动失效。
- Payload 不能放敏感信息。
- 过大时会增加网络开销。
常见面试追问:
- JWT 里可以放什么:用户 ID、角色、过期时间、设备标识等。
- JWT 能否放密码:不能。
- JWT 是否绝对安全:不是,仍然需要 HTTPS、密钥轮换、黑名单和过期控制。
RBAC 怎么设计
RBAC 是最常见的企业权限模型。
核心实体:
- 用户 User。
- 角色 Role。
- 权限 Permission。
- 菜单 Menu。
- 资源 Resource。
关系:
- 用户拥有多个角色。
- 角色拥有多个权限。
- 权限可以映射到菜单、按钮、接口。
flowchart TD
U[用户] --> UR[用户-角色]
UR --> R[角色]
R --> RP[角色-权限]
RP --> P[权限]
P --> M[菜单/按钮/接口]
方案一:角色直接控制权限
简单,适合中小系统。
缺点:
- 细粒度不够灵活。
方案二:角色 + 权限码
每个按钮、接口、页面功能都有统一权限码。
优点:
- 细粒度控制。
- 后台、前端、网关可以共享权限码。
适合:
- 企业后台。
- 多系统统一权限中心。
方案三:RBAC + 数据权限
除了功能权限,还要控制数据范围,例如:
- 只能看自己部门数据。
- 只能看自己负责的客户。
- 区域代理只能看本区域订单。
这是企业里更常见的复杂权限模型。
菜单权限、按钮权限、接口权限
权限往往不是只做接口拦截。
| 权限类型 | 作用位置 | 示例 |
|---|---|---|
| 菜单权限 | 前端导航 | 是否展示“退款管理”菜单 |
| 按钮权限 | 页面操作 | 是否显示“审核”“删除”按钮 |
| 接口权限 | 服务端网关/拦截器 | 是否允许调用 /refund/approve |
| 数据权限 | SQL 层/业务层 | 是否只能查本部门订单 |
面试重点:
- 前端隐藏按钮不是安全控制,安全必须在后端做。
- 只做前端权限不够。
- 接口权限和数据权限要分开设计。
单点登录怎么做
企业常见多个系统共用一套身份中心。
常见方案:
- 统一认证中心 + Session。
- 统一认证中心 + JWT。
- OAuth2 / OIDC。
对比:
| 方案 | 优点 | 缺点 |
|---|---|---|
| 统一 Session | 简单直观 | 分布式共享复杂 |
| JWT SSO | 扩展性好 | 注销和失效管理麻烦 |
| OAuth2/OIDC | 标准化、适合第三方接入 | 接入复杂度高 |
面试时可以强调:
企业内多个系统共享登录态时,通常会有统一认证中心。认证中心负责登录和发证,业务系统只验证 Token 或票据,不直接接触密码。
风控怎么做
风控不是只靠验证码。
常见风险:
- 频繁登录失败。
- 短时间多地登录。
- 设备切换异常。
- 批量注册。
- 接口刷单。
- 异常 IP 和代理流量。
常见措施:
- 图形验证码。
- 短信验证码。
- 登录失败次数限制。
- 设备指纹。
- IP 频率限制。
- 黑名单/白名单。
- 登录地异常提醒。
flowchart TD
A[登录请求] --> B{是否异常}
B -->|正常| C[正常登录]
B -->|高风险| D[验证码/短信验证]
B -->|高危| E[拒绝登录或人工审核]
权限校验放在哪里
常见放置位置:
- 网关层:粗粒度鉴权。
- 认证服务:统一登录和 Token 校验。
- 业务服务拦截器:接口级权限。
- Service 层:业务约束和数据权限。
- SQL 层:复杂数据权限过滤。
一般建议:
- 网关做统一身份识别。
- 业务服务做细粒度权限。
- 数据权限尽量靠近查询层。
常见高频题
Token 为什么要过期?
因为 Token 一旦泄漏就可能被长期滥用。过期时间可以缩短泄漏窗口,配合刷新 Token、黑名单和重新登录机制更安全。
JWT 为什么不能只靠签名就永久有效?
因为签名只能证明内容没被篡改,不能证明这个身份已经被主动注销。要结合过期、黑名单和刷新机制。
为什么前端隐藏按钮还要后端校验?
前端可以被绕过,后端才是最终安全边界。
权限码怎么设计更稳妥?
建议采用统一命名规则,例如 order:refund:approve,前后端、网关、服务端统一使用。
数据权限和功能权限有什么区别?
功能权限控制“能不能做”,数据权限控制“能看到哪部分数据”。
总结
用户与权限场景回答可以围绕四条主线:
- 认证怎么做:Session、Token、JWT、SSO。
- 授权怎么做:RBAC、权限码、数据权限。
- 安全怎么做:验证码、风控、黑名单、失效控制。
- 多系统怎么协同:认证中心、网关、业务服务、统一权限中心。
企业里真正稳的方案通常不是单一技术,而是认证中心 + Token/Session + RBAC + 风控 + 数据权限的组合。


