1. Overview
对于web应用,Shiro提供了认证和授权的过滤器实现。
2. Architecture
a. ServletContextSupport
提供了对ServletContext访问的支持。
b. AbstractFilter
提供了对过滤器初始化的配置。如果想在过滤器初始化时添加逻辑,可通过覆写onFilterConfigSet方法。
c. NameableFilter
提供了重命名过滤器的单一功能。过滤器默认的名字为web.xml中配置的filter-name,可通过NameableFilter的name属性设置一个新的名字。
d. OncePerRequestFilter
每次请求,过滤器需要依次执行,OncePerRequestFilter保证了每次请求时,每个过滤器只执行一次。实际的业务逻辑,由子类通过doFilterInternal方法实现。
e. AdviceFilter
覆写了OncePerRequestFilter的doFilterInternal方法,将过滤操作细化为前置处理,后置处理以及清理操作。只有前置方法preHandle返回true时,才会调用下一个过滤器。
f. PathMatchingFilter
支持Ant风格路径匹配。如果请求的路劲与配置的路径匹配,由onPreHandle方法决定该请求将如何处理。对于过滤器AnonymousFilter的实现,onPreHandle方法总是返回true。对于过滤器AccessControlFilter,需要由isAccessAllowed和onAccessDenied方法共同决定。所有的认证和授权过滤器都继承AccessControlFilter类。
3. Authentication Filters
AuthenticationFilter为所有认证过滤器的基类,默认的isAccessAllowed方法返回subject.isAuthenticated的值。也就是说,如果请求的路径配置了authc过滤器,需要当前的subject被认证过。如果当前的subject没有被认证过,不同的实现,执行的操作有所不同。BasicHttpAuthenticationFilter实现会根据请求的头信息自动执行一次认证操作,如果认证失败,请求返回401代码。FormAuthenticationFilter实现会根据当前的请求路径与登陆路径匹配,如果为登陆请求,尝试执行一次认证操作,如果不为登陆请求,请求调转到登陆页。
3.1 AnonymousFilter
AnonymousFilter主要用于那些不需要认证即可访问的资源。
[urls]
/user/signup/** = anon
/user/** = authc
对于/user/signup,任何用户都可以访问。对于/user/,需要当前的subject已认证过。
3.2 UserFilter
如果配置了UserFilter,表示请求的Subject已认证过或被"remember me"记忆:
[urls]
/news/**=user
对于/news/下的所有资源,只要用户登录过即可访问。
3.3 FormAuthenticationFilter
FormAuthenticationFilter需要当前的Subject必须被认证过,否则流程将跳转到设置的登陆url(通过setLoginUrl方法)。
[urls]
/news/**=authc
3.4 BasicHttpAuthenticationFilter
如果请求的Subject.isAuthenticated方法返回false,BasicHttpAuthenticationFilter将通过HTTP基础认证方式进行认证(关于HTTP基础认证,请查阅相关资料):
[urls]
/news/**=authcBasic
如果请求/news/,程序会执行Subject.isAuthenticated方法,如果返回false,执行HTTP基础认证。
4. Authorization Filters
AuthorizationFilter为所有授权过滤器的基类。默认的onAccessDenied方法中逻辑为,如果当前的Subject没有绑定任何标识信息,将请求转向登陆页面。如果Subject绑定了标识信息并且配置了unauthorizedUrl,请求将转向unauthorizedUrl,否则返回401代码。
4.1 PermissionsAuthorizationFilter
常用的AuthorizationFilter实现为PermissionsAuthorizationFilter,支持以权限的形式配置资源:
[urls]
/system/getUsers=perms[0]
如果请求的路径为/system/getUsers,需要当前的Subject具有权限"0"(调用subject的isPermitted或isPermittedAll方法),才允许访问资源,否则不允许访问。
4.2 RolesAuthorizationFilter
RolesAuthorizationFilter过滤器支持以角色的形式配置资源:
[urls]
/system/getUsers=roles[admin]
如果请求的路径为/system/getUsers,只有当前的Subject具有"admin"角色(调用subject的hasAllRoles方法),才允许访问资源,否则不允许访问。
4.3 PortFilter
PortFilter支持以端口的形式配置资源:
[urls]
/some/path/** = port
/another/path/** = port[8080]
如果请求的端口号与配置的资源映射端口号相同,则允许对资源进行访问。否则请求将被转向为对应资源映射端口的路劲。比如:如果请求地址为/another/path/test1,端口为9090,由于/another/path/test1需要8080端口才能够访问,那么请求将会被转向:http://localhost:8080//another/path/test1,亦即被转向了正确的url路劲。
4.4 HostFilter
HostFilter支持以主机的形式控制对资源的访问,Shiro1.1还没有完全实现对这种形式的支持。其isAccessAllowed方法将返回UnsupportedOperationException异常。
4.5 SslFilter
SslFilter支持以ssl的形式配置资源:
[urls]
/secure/getUser = ssl
如果要访问资源/secure/getUser,需要请求的地址相同且必须为https,端口为443才允许访问。
4.6 HttpMethodPermissionFilter
HttpMethodPermissionFilter支持以HTTP请求方法的方式配置资源。其内部将HTTP请求方法转义为对应的HTTP操作,对应关系如下:
head | read |
get | read |
put | update |
post | create |
mkcol | create |
options | read |
trace | read |
以下是一个例子:
[urls]
/user/** = rest[user]
如果使用GET方法访问/user/1234,由于GET方法对应着"read"操作,最后会转义为:Subject.isPermitted("user:read")。也就是说,当前的Subject必须具有user的read权限才允许对资源的访问。如果使用POST请求/user,会转义为Subject.isPermitted("user:create"),即当前Subject必须具有user的create权限。
- 大小: 51.3 KB
- 大小: 36 KB
- 大小: 42.6 KB
分享到:
相关推荐
shiro shiro-core-1.7.1 jar shiro漏洞
shiro使用的版本是1.2.4,存在反序列化漏洞,我们采取的办法是手动升级到了1.2.6版本,但苦于无法验证是否解决了问题,后来发现了一款测试工具,ShiroExploit。 测试工具下载地址 ... 反序列化漏洞是如何产生的?...
shiro最简单整合版本shiro最简单整合版本shiro最简单整合版本shiro最简单整合版本shiro最简单整合版本
shiro(shiro-all-1.8.0.jar)
尚硅谷_Shiro_源码、课件 · 01.尚硅谷_Shiro_简介 · 02.尚硅谷_Shiro_HelloWorld · 03.尚硅谷_Shiro_集成 Spring · 04.尚硅谷_Shiro_工作流程(1) · 05.尚硅谷_Shiro_DelegatingFilterProxy · 06. 尚硅谷...
shiro所有的jar包 还有跟cas集成的jar包 以及shiro官网的jar下载地址
Apache_Shiro_使用手册(一)Shiro架构介绍
shiro入门 安全校验
freemarker的shiro标签
<property name="filters"> <!-- 添加casFilter到shiroFilter --> /shiro-cas = casFilter /logout = logoutFilter /users/** = user ...
shiro权限demo
赠送jar包:shiro-core-1.4.0.jar; 赠送原API文档:shiro-core-1.4.0-javadoc.jar; 赠送源代码:shiro-core-1.4.0-sources.jar; 赠送Maven依赖信息文件:shiro-core-1.4.0.pom; 包含翻译后的API文档:shiro-core...
shiro 反序列化漏洞综合利用工具 shiro_attack_by J1anfen,里面的 jar 直接运行即可,用于 shiro 漏洞检测、修复验证等
shiro-redisson 是一个 Apache Shiro 的扩展组件,提供了基于 redis 实现的缓存和会话,以支持分布式环境下的应用。底层使用了 redisson 作为 redis 客户端。
SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 SpringBoot整合Shiro示例实现动态权限加载更新+Session共享+单点登录 ...
Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大. Shiro 可以非常容易的开发出足够好的应用,其不仅...
跟我学shiro的书和例子源码,非常适合学习shiro者使用
一款好用的shiro检测利用工具,使用方式java -jar shiro_tool.jar https://xx.xx.xx.xx,Github有开源下载链接,在这里上传是为了赚积分下载别的工具,欢迎使用
Shiro是Apache从JSecret项目演变而来的,该框架实现了:用户登录、认证、授权和权限管理操作的完整控制流程。Shiro最早的名字是JSecurity,后来更名为Shiro并成为Apache的孵化项目。这次改名也同样影响了Grails ...
com.jagregory.shiro.freemarker.ShiroTags 已经打包过的权限标签,可直接使用