shiro
2017-11-12 22:01:29 52 举报
AI智能生成
登录查看完整内容
shiro学习整理
作者其他创作
大纲/内容
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的入口点,拦截需要安全控制的请求进行处理
拦截器链: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=\
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(\"\
在Servlet容器中,默认使用JSESSIONID Cookie维护会话,且会话默认是跟容器绑定的;在牟霞情况下可能需要使用自己的会话机制,辞职我们可以使用DefaultWebSessionManager来维护会话
会话监听器:用于监听会话创建,过期,退出事件
会话存储/持久化
会话验证:用于定期验证会话是否已过期,如果过期将停止会话;出去性能考虑,一般情况下都是会获取会话时来验证会话是否过期并停止会话的;但是如在web环境中,如果用户不主动退出是不知道会话是否过期的,因此需要定期的检测会话是否过期,Shiro提供了会话验证调度器SessionValidationScheduler来做这件事情。
第十一章 与Spring集成
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。
Shiro提供了相应的注解用于权限控制,如果使用这些注解就需要使用AOP的功能来进行判断,Shiro提供了Spring AOP集成用于权限注解的解析和验证。
0 条评论
回复 删除
下一页