shiro 架构
- Authentication: 身份认证/登录,是一个可扩展点,可以自定义实现;可以使用认证 策略(Authentication Strategy),即什么情况下算用户认证通过了;
- Authorization: 权限验证,决定用户有什么样的访问权限。
- Session Management: 用户session管理,支持非 web环境以及EJB。
- Cryptography: 加密,保证数据安全性。
- Web Support:Web 支持,可以非常容易的集成到Web 环境
- Caching:缓存,例如,可缓存用户session,用户信息,拥有的角色,权限信息
- Concurrency:Shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能 把权限自动传播过去
- Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
- Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了
shiro 概述
- Subject: 与当前应用程序交互的“用户”。“Subject”可以是一个人,但它也可以表示第三方服务,守护程序帐户,定时任务或类似的东西-基本上是当前与该软件交互的任何东西。Subject 只是一个接口,当与 SecurityManager交互时,会转换为具体的subject。
- SecurityManager: SecurityManager shiro的核心,管理协调其内部组件,程序员一般不用理会,并且应用程序开发人员几乎所有时间都花在Subject API上。
- Realms: realm是你的应用和shiro之间桥梁,当需要执行身份验证(登录)和授权(访问控制)时,Shiro会从一个或多个为应用程序配置的realm中查找数据内容。
shiro中默认的过滤器
如下的拦截器 都在DefaultFilter 枚举类中有说明
过滤器名称 | 过滤 | 描述 | 例子 |
---|---|---|---|
anon | org.apache.shiro.web.filter.authc.AnonymousFilter | 不需要登录的路径 | /user/signup/** = anon |
authc | org.apache.shiro.web.filter.authc.FormAuthenticationFilter | 用户认证(登录)拦截器,如果验证不通过跳转到你配置的登录页面。主要属性:usernameParam:表单提交的用户名参数名 passwordParam:表单提交的密码参数名 loginUrl:登录页面地址 successUrl:登录成功后的跳转页面 failureKeyAttribute 登录失败错误信息存储key | |
authcBasic | org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter | Basic Http 身份拦截器 主要属性:applicationName:弹出登录框显示的信息 | |
logout | org.apache.shiro.web.filter.authc.LogoutFilter | 退出拦截器 主要属性:redirectUrl:退出成功后重定向的地址 | |
noSessionCreation | org.apache.shiro.web.filter.session.NoSessionCreationFilter | 阻止在请求期间创建新的会话,保证无状态。 | |
perms | org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter | 权限授权拦截器,验证用户是否拥有权限 | 例子:/user/** = perms[“user:create”] |
port | org.apache.shiro.web.filter.authz.PortFilter | 端口拦截器 | |
rest | org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter | rest 风格拦截器,根据请求的HttpMethod[POST、GET、Delete]进行拦截 | |
roles | org.apache.shiro.web.filter.authz.RolesAuthorizationFilter | 角色授权拦截器,验证用户是否拥有所选角色 | |
ssl | org.apache.shiro.web.filter.authz.SslFilter | ssl拦截器 只有请求协议是https的才能通过,否则自动跳转到https端口 | |
user | org.apache.shiro.web.filter.authc.UserFilter | 用户拦截器,用户已经身份认证/记住我的登录的都可以拦截 |
web环境下 默认过滤器初始化的地方 DefaultFilterChainManager
protected void addDefaultFilters(boolean init) {
for (DefaultFilter defaultFilter : DefaultFilter.values()) {
addFilter(defaultFilter.name(), defaultFilter.newInstance(), init, false);
}
}
shiro权限校验
- 使用perms 拦截器,对路径进行拦截,判断当前用户是否有权限
- 使用shiro 注解的形式
- 在页面使用shiro标签
shiro 依赖
非web环境下,仅需要slf4j-api.jar和slf4j的绑定.jars之一。Web配置还需要commons-beanutils-core.jar。可以在需要时添加基于功能的依赖项(Ehcache缓存,基于Quartz的会话验证,Spring依赖项注入等)。