shiro
2017-11-12 22:01:29 53 举报
AI智能生成
shiro学习整理
作者其他创作
大纲/内容
第七章与web集成
shiroFilter拦截URL,读取配置文件(如ini配置)
第八章拦截器机制
拦截器介绍
NameableFilter:给filter起个名字,默认FilterName
OncePerRquestFilter:用于防止多次执行Filter,一次请求只会走一次拦截器链,提供enabled=true表示默认开启拦截器实例
AdviceFilter提供AOP风格的支持
preHandler:类似于AOP中的前置增强
postHandle:类似于AOP中的后置返回增强
afterCompletion:类似于AOP中的后置最终增强,不管有没有异常都会执行,可以进行清理资源(如接触Subject与线程绑定之类的
PathMatchingFilter:提供了基于Ant风格的请求路径匹配功能及拦截器参数解析的功能
AccessControlFilter提供了访问控制功能,比如是否允许访问,当访问拒绝时如何处理等。还可以处理登陆成功后重定向到上一个请求(重要)
ShiroFilter整个Shiro的入口点,拦截需要安全控制的请求进行处理
默认拦截器:org.apache.shiro.web.filter.mgt.DefaultFilter。身份验证相关的:authc(表单拦截器),authcBasic(身份验证拦截器),logout(退出拦截器),user(用户拦截器),anon(匿名拦截器)。授权相关的:roles(角色拦截器),perms(权限授权拦截器),port(端口拦截器),rest(风格拦截器),ssl(SSL拦截器),其他:noSessionCreation(不创建会话拦截器)
拦截器链:Shiro对Servlet容器的FilterChain进行了代理,即ShiroFilter在继续Servlet容器的Filter链的执行之前,通过ProxiedFilterChain对Servlet容器的FilterChain进行了代理;即先走Shiro自己的Filter体系,然后才会委托给Servlet容器的FilterChain进行Servlet容器级别的Filter链执行;Shiro的ProxiedFilterChain执行流程:1.先执行Shiro自己的Filter链;2.再执行Servlet容器的Filter链。而ProxiedFilterChain是通过FilterChainResolver根据配置文件中【urls】部分是否与请求的url是否匹配解析得到的。
自定义拦截器
第九章 JSP标签
Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登陆用户显示相应的页面按钮
导入标签库:<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>标签库定义在shiro-web.jar报下的META-INF/shiro.tld中定义
guest标签:<shiro:geust>用户没有身份验证时显示相应信息,即游客访问信息
user标签:<shiro:user>用户已经身份验证/记住我登陆后显示相应的信息
authenticated标签:<shiro:authenticated>用户已经身份验证通过,即Subject.login登录成功,不是记住我的登录
notAuthenticated标签:<shiro:notAuthenticated>用户已经身份验证通过,即没有调用Subject.login进行登录,包括记住我自动登录也属于未进行身份验证
principal标签:<shiro:principal property="username"/>显示用户身份信息,默认调用Subject.getPrincipal()获取,即Primary Principal
hasRole标签:<shiro:hasRole name="admin"> 如果当前Subject有角色将显示body体内容
hasAnyRoles标签:<shiro:hasAnyRoles name="admin,user"> 如果当前Subject有任意一个角色将显示body体内容
lacksRole标签:<shiro:lacksRole name="abc"> 如果当前Subject没有角色将显示body体内容
hasPermission标签:<shiro:hasPermission name="user.create">如果当前Subject有权限将显示body体内容
lacksPermission标签:<shiro:lacksPermission name="org:create">如果当前Subject没有权限将显示body体内容
导入自定义标签库:<%@taglib prefix="zhang" tagdir="/WEB-INF/tags" %>
第十章 会话管理
Shiro提供了完整的企业级会话管理功能,不依赖于底层容器,不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对web的透明支持、SSO单点登录的支持等特性。即直接使用Shiro的会话管理可以直接替换如Web容器的会话管理
会话:session.getId();session.getHost();session.getTimeout();sessiong.setTimeout(毫秒);session.getStartTimestamp();session.getLastAccessTime();session.touch();session.stop();session.setAttribute("","");session.removeAtribute("");
会话管理器:管理者应用中所有的Subject的会话的创建、维护、删除、失效、验证等工作。是Shiro的核心组件,顶层组件SecurityManager直接继承了SessionManager,且提供了SessionSecurityManager实现直接把会话管理委托给相应的SessionManager,DefaultSecurityManager及DefaultWebSecurityManager默认SecurityManager都继承了SessionSecurityManager
Shiro提供了三个默认实现会话:1.DefaultSessionManager,DefaultSecurity使用默认实现,用于JavaSE环境;2.ServletContainerSessionManager,DefauftWebSecurityManager使用的默认实现,用于web环境,其直接使用servlet容器的会话;3.DefaultWebSessionManager,用于Web环境的实现,可以替代ServletContainerSessionManager,自己维护这会话,直接废弃了Servlet容器的会话管理
在Servlet容器中,默认使用JSESSIONID Cookie维护会话,且会话默认是跟容器绑定的;在牟霞情况下可能需要使用自己的会话机制,辞职我们可以使用DefaultWebSessionManager来维护会话
会话监听器:用于监听会话创建,过期,退出事件
会话存储/持久化
会话验证:用于定期验证会话是否已过期,如果过期将停止会话;出去性能考虑,一般情况下都是会获取会话时来验证会话是否过期并停止会话的;但是如在web环境中,如果用户不主动退出是不知道会话是否过期的,因此需要定期的检测会话是否过期,Shiro提供了会话验证调度器SessionValidationScheduler来做这件事情。
第十一章 与Spring集成
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。
Shiro提供了相应的注解用于权限控制,如果使用这些注解就需要使用AOP的功能来进行判断,Shiro提供了Spring AOP集成用于权限注解的解析和验证。
0 条评论
下一页