490 字
2 分钟
Shiro

一,shiro 框架简介#

apache shiro 是一个 java 安全框架,用于提供程序中的身份认证,授权控制,会话管理,加密管理等功能,常用于后台管理系统,cms 系统

二,整体架构#

核心组件图:

Subject | SecurityManager |#

| | |

Authenticator Authorizer SessionManager | | | Realm Realm SessionDAO

1.subject

当前用户对象,代表用户身份

Subject subject = SecurityUtils.getSubject();

职责:

1.登录

subject.login(token)

2.判断认证状态

subject.isAuthenticated()

3.获取用户身份

subject.getPrincipal();

principal 表示用户信息:

newSimpleAuthenticationInfo( principal, credentials, realm )

4.权限判断

subjec.hasRole()

subject.isPermitted()

2.securitymanager

框架的核心管理者,大管家,负责协调认证、授权、会话

3.realm

realm 是框架于业务直接按的数据桥梁,类似 mybatis 中 userMapper 与数据库之间的关系

框架通过 realm 来查询数据库中的信息,例如登录时需要拿到数据库中用户信息来进行比对

shiro--->realm---->数据库

使用场景及示例:

登录认证时:

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationTokentoken)

用户输入用户名密码,realm 查询数据库返回用户信息 AuthenticationInfo,框架拿到数据进行密码校验

授权时:

doGetAuthorizationInfo()

通过数据库查询角色的权限相关信息

4.authenication 认证模块

认证流程:

Controller
↓
subject.login(token)
↓
DelegatingSubject
↓
SecurityManager
↓
Authenticator
↓
Realm
↓
doGetAuthenticationInfo()
↓
数据库查询
↓
AuthenticationInfo
↓
密码校验
↓
认证成功

AuthenticationToken

token保存用户输入。

UsernamePasswordToken

SimpleAuthenticationInfo

Realm返回:

new SimpleAuthenticationInfo(
principal,
credentials,
realmName
)

principal:

用户身份

credentials:

密码信息

5.Authorization授权模块#

认证判断你是谁,授权决定你能做什么

  1. Role角色模型

Role表示身份。

subject.hasRole(“admin”) 2.Permission权限模型

Permission表示具体操作。

例如:

user

user

article

判断:

subject.isPermitted( “user” ) 3. 注解授权

常见:

角色 @RequiresRoles(“admin”) 权限 @RequiresPermissions(“user”)

6.Shiro Filter#

Filter负责:

请求入口控制

配置:

ShiroFilterFactoryBean

核心:

filterChainDefinitionMap 8.2 常见过滤器 过滤器 作用 anon 匿名访问 authc 必须认证 logout 退出登录 roles 角色控制 perms 权限控制

例如:

map.put( “/login”, “anon” );

map.put( “/admin/**”, “authc” );

login无需认证

admin需要登录

Shiro
https://lab404.cn/posts/shiro/
作者
见山
发布于
2026-08-08
许可协议
CC BY-NC-SA 4.0