
shiro
文章平均质量分 56
iteye_14612
这个作者很懒,什么都没留下…
展开
-
shiro学习01-安全框架相关名词与shiro常用类粗略介绍
安全框架其实就干了两件事,一是用户能不能登录,第二个是登录之后能做什么,就这些,shiro的作用也就这么多,所以在学习要对shiro采取一种心理上的藐视,因为他所有的工作都是为了满足这两个来实现的。 一、shiro相关的名词解释,因为后面的文档都是用的专有名词,所以我们在这里先将这些名词说明一下,以免造成误解。 1、Authentication 校验,验证;证明一个主题身份的...原创 2016-01-28 15:45:13 · 292 阅读 · 0 评论 -
shiro学习16-shiro提供的filter-OncePerRequestFilter
从这一节开始我们介绍shiro提供的filter,记住尽管这是shiro提供的,但是不一定适合你的项目,我们看他们源码的目的是理解其中的运行逻辑,在开发中不一定强制要求使用他们提供的filter。我们从OnecPerRequestFilter,虽然这个类不是一个最顶层的类,他还有父类NameableFilter,但是NameableFilter我在开发中没有使用它提供的名字的便利性,而是根...原创 2016-02-23 15:04:32 · 899 阅读 · 1 评论 -
shiro学习15-访问权限控制-authorizingRealm,Authorizor
在经过前面的filterChainManager和FilterChainResolver,PatternMatcher之后就会找到访问某个路径的filter,然后filter中就检查当前的subejct是否具有需要的有某个角色或者是权限。这个时候就会调用subject.isPermitted或者是subject.hasRole方法。这个方法的调用类似于我们之前在登陆校验时的方法调用,会调用组成...原创 2016-02-23 15:05:05 · 675 阅读 · 0 评论 -
shiro学习17-shiro提供的filter-AbstractShiroFilter
这个类是上面的OncePerRequestFilter的子类,实现了其doInternalFilter方法,所有的业务逻辑在里面实现。这个类也是一个抽象类,但是没有任何的抽象方法,所以只要集成他就可以直接使用了。这是一个及其重要的类,shiro集成spring的ShiroFilterFactoryBean返回给spring context中的bean就是他,在ShiroFilterFact...原创 2016-02-23 15:05:24 · 712 阅读 · 0 评论 -
shiro学习13-访问权限控制-filterChainManager类
我们可以在spring的xml中配置任意数量的filter,即servet的filter,然后对某个路径或者是路径模板的访问使用这个filter。但是如何管理路径和filter的组合呢?这里介绍路径和filter的管理类——filterChainManager。这个类用于管理我们在shiroFilterFactoryBean中配置的过滤器和模板,以及配置的参数。 使用的实现类是Defaul...原创 2016-02-23 15:05:27 · 195 阅读 · 0 评论 -
shiro学习14-访问权限控制-PatthernMatcher
前面说了访问控制权限是使用路径模板和对应的filter来配合使用的,但是如何将路径模板和路径匹配起来呢,这里就要使用PatternMatcher,shiro中默认使用的是AntPathMatcher。当某个请求来到时,会挨个的将我们配置的路径模板与当前的路径进行匹配,如果匹配得上,就调用这哥模板的filter,现在我们关心的是如何进行匹配的,通过调用的AntPathMatcher中的match...原创 2016-02-23 15:05:48 · 157 阅读 · 0 评论 -
shiro学习12-访问权限控制-shiroFilterFactoryBean
从这一节开始开始学习请求的访问控制,即用户的每一次的访问的限制,这个事根据配置的用户的角色和权限来决定url对于特定的用户能不能访问。 我们从shiroFilterFactoryBean开始。这个类是真正的filter,我们在web.xml中配置的DelegatingFilterProxy其实就是代理的他,当每一次请求来了之后,这个代理的fiter会将请求转发给这个正真的filte...原创 2016-02-24 10:34:02 · 851 阅读 · 0 评论 -
shiro学习10-用户以及登录-登录与退出
<!--[if !supportLists]-->1、 前面已经介绍完了创建subject用户和封装shiro自己的session,这里介绍用户的登录和退出。 <!--[endif]-->直登录直接调用subject.login(token)方法即可,因为我们在创建subject的时候就把securityManager传入到了subject中,所以subjec...原创 2016-02-24 10:34:17 · 478 阅读 · 0 评论 -
shiro学习08-用户以及登录-session
Shiro对原始的httpSession进行了封装,在最初的创建shiro的session的时候是将的原始的HttpSeesion封装进了一个HttpServetSession,我们查看一下这个HttpServeltSession的所有的方法,除了touch方法和与maxTimeout方法相关的,都是直接调用的封装的HttpSeesion,touch方法很简单,就是让封装的httpSessio...原创 2016-02-24 10:34:36 · 222 阅读 · 0 评论 -
shiro学习09-用户以及登录-sessionManager
上面说了shiro对httpSession的封装,封装成shiro自己的session类,这里说如何建立shiro的session——SessionManager类。SessionManager用于管理shiro的session的创建(不是httpSession),默认使用的是ServletContainerSessionManager,在defaultWebSecurityManager...原创 2016-02-24 10:34:37 · 232 阅读 · 0 评论 -
shiro学习07-用户以及登录-subjectCallable类
说实话,这个类我没怎么明白,我写这个都是看的javadoc,是对javadoc的翻译。这个类将一个Callable关联到subject上,来保证当callable运行时的subject的管理,通过这个callbale,可以保证在运行时的securityUtils.getSubject正确执行,即使callable运行的线程不是产生这个callable的线程。这样就保证了即使是异步的执行,也...原创 2016-02-24 10:34:45 · 325 阅读 · 0 评论 -
shiro学习06-用户以及登录-ThreadState类
这个接口用于将线程执行中的对象绑定到线程上或者在某些时候将不需要的对象从线程上解绑定。bind方法:将对象绑定到对象上方便以后的调用。Resotore方法:在线程结束之后如果是抛了异常之后,线程必须回复成原来的样子,这样可以保证线程在重复使用的时候的干净调用,放置出错。这个方法比最好用try finally的方式调用。书写格式例子ThreadState state = //...原创 2016-02-25 13:28:41 · 254 阅读 · 0 评论 -
shiro学习05-用户以及登录-threadContext类
我们知道直接调用SecurityUtils.getSubject这个方法可以返回当前的用户,他是怎么做到的呢,这个原理和spring的声明式事物或者是hibernate的open-session-in-view的实现是一个道理,都是讲某些资源在访问的一开始就创建,然后使用threadLocal(也就是线程局部变量)模式将目标资源绑定到当前线程上,当再次调用上时,直接从threadLocal上调...原创 2016-02-25 13:29:07 · 834 阅读 · 0 评论 -
shiro学习04-用户以及登录-subjectDao类
前面说完了subject的创建过程,创建完成之后会保留起来,保subject的操作就需要subejctDao来实现。既然每一次访问都会创建一个新的subject,那么为什么还需要dao来存储呢?其实Subjectdao做的事情很少,没有存储subject,只是将当前subject的校验信息(isAuthenticated)和principalCollection放入到session中。(我...原创 2016-02-25 13:29:25 · 1257 阅读 · 1 评论 -
shiro学习03-用户以及登录-subjectFactory类
前一节的subjectContext最终将传入subjectFactory用于构建一个subject。subjectFactory很简单,就是将通过subjectcontext传递过来的值产生一个subject,默认使用的subjectContext是DefaultSubjectFactory,它将返回一个DelegatingSubject实例。...原创 2016-02-25 13:30:04 · 426 阅读 · 0 评论 -
shiro学习02-用户以及登录-SubjectContext
上一节说的是subject,这次说一下如何构成subejct——使用subjectContext类。这个类就是一个map,然后将构建subject的所有属性都组织到一起,然后传递给一个subjectFactory,用于构成一个subject。他的里面也含有subject,并且每一次在创建新的subject的时候都会去尝试调用getSubject方法以获得原来的subject,但是我在set...原创 2016-02-25 13:30:59 · 297 阅读 · 0 评论 -
shiro学习01-用户以及登录-Subject类
网站的用户在shiro中用subject表示,使用的默认类是WebDelegatingSubject,是DelegatingSubject的子类,这个WebDelegatingSubject里面含有很多很多的参数:·PrincipalCollection:主键(或者标记的集合), ·authenticated:是否校验过,·Host:登录的ip·session:当前的sessi...原创 2016-02-26 16:46:48 · 469 阅读 · 0 评论 -
shiro学习18-shiro提供的filter类-AdviceFilter
这个类和之前的AbstractShiroFilter是平级的,都是OnecPerRequestFilter的子类,我们从他的名字Advice中就能联想到他的用意——AOP,在spring中有很多的advice,也就是通知,比如前置通知,后置通知,最终通知等,这个类允许通过很多方法实现filter中的aop的特点,比如preHandle(前置通知),postHandle(后置通知,但是在抛异常的...原创 2016-02-20 15:37:01 · 1698 阅读 · 0 评论 -
shiro学习20-shiro提供的filter-PathMatchingFilter类
这个类也是AdviceFilter的实现类,我们先看看他的preHandle方法protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { if (this.appliedPaths == null || this.appliedPaths...原创 2016-02-20 15:36:43 · 2768 阅读 · 0 评论 -
shiro学习02-用户校验及权限验证基础
下面是摘自官方文档中的用户校验和权限检查,我觉得还是很有必要看一看。一、用户校验这一节对应于官方文档的地址是:http://shiro.apache.org/java-authentication-guide.html,主要介绍shiro的用户验证的部分。在这一节中主要的名词有如下:Subject(类比于用户),Principal(类似于用户名),Credentials(类似密...原创 2016-01-28 20:06:21 · 213 阅读 · 0 评论 -
shiro学习03-登录校验(1)
这一节说明shiro对登录模块的限制,这一节可能用到的接口有:SecurityManager,Realm,AuthenticationToken,AuthenticationInfo,PrincipalCollection,如果你对这些接口不熟悉的话,回到第一节先看看他们的大概介绍。登录模块的大概流程很简单,用户提交用用名+密码,然后从数据库查找该用户,如果没有找到怎么样,找到了用户但是密...原创 2016-01-29 16:04:45 · 132 阅读 · 0 评论 -
shiro学习04-登录校验(2)
用户的信息多都在Realm中,所以我们先从realm开始看源码吧。我们在上一篇中用到了AuthenticationRealm,这个就是Realm接口的实现类,我们具体看这个类的源码以及在校验时所用到的方法。先从这个类的无参构造方法开始 public AuthenticatingRealm() { this(null, new SimpleCredentials...原创 2016-01-29 16:33:09 · 214 阅读 · 0 评论 -
shiro学习33-shiro的工具类-webUtils
这个类提供的很多方法对于我们的平时开发都很有帮助,并不仅仅是shiro内部的应用。<!--[if !supportLists]-->1、 1、 <!--[endif]-->getPathWithinApplication(HttpServletRequest),取得不包含应用路径的路径。<!--[if !supportLists]-->2、 2、n...原创 2016-02-18 12:36:51 · 1448 阅读 · 0 评论 -
shiro学习31-shiro的工具类-securityUtils
这个类更简单,只是提供当前线程的subject和应用中唯一的securityUtils。源码如下:public static Subject getSubject() { Subject subject = ThreadContext.getSubject(); if (subject == null) { subject = ...原创 2016-02-18 12:37:03 · 752 阅读 · 0 评论 -
shiro学习30-shiro的工具类-securityManager
这个类不是一个工具类,但是我们在使用的时候就是将其作为一个工具类使用的,所以将其放在这里。我们看一下的javadoc就知道了.Javadoc的翻译:这个类对所有的subject执行安全相关的操作,这个接口只是为了方便而存在的,他继承了Authenticator,authorizer,SessionManager,所以将所有的操作聚集在这个类中,通过引用其他的类来完成比如校验,授权,sess...原创 2016-02-18 12:48:45 · 204 阅读 · 0 评论 -
shiro学习28-shiro提供的filter-PermissionAuthyorizationFilter
上一节说的是基于角色的权限验证,这一节介绍基于权限的角色验证类——PermissionAuthorizationFilter这个类和前面的基于角色的判定一样,不过使用的权限而已,在配置shiroFilterFactoryBean的时候每一个filter后面的[permission1,permission2]表示的是权限,而且是或的关系,只要一个满足即可。public boolean i...原创 2016-02-18 14:13:51 · 180 阅读 · 0 评论 -
shiro学习29-实现rememberMe功能-RememberMeManager
这个接口是用来实现rememberme的功能的。他的实现类为AbstractRememberMeManager,是一个抽象类,最终的继承类为cookieRememberMeManager,即将信息发送到cookie中。先看一下defaultWebSecurityManager的构造方法: public DefaultWebSecurityManager() { s...原创 2016-02-18 14:13:57 · 3191 阅读 · 0 评论 -
shiro学习27-shiro提供的filter-RoleAuthorizationFilter
这个是根据角色来判断某个操作能否进行,在配置ShiroFilterFactoryBean的时候每个filter后面的[role1,role2]被当做是角色来处理。 @SuppressWarnings({"unchecked"})public boolean isAccessAllowed(ServletRequest request, ServletResponse respons...原创 2016-02-19 10:45:24 · 270 阅读 · 0 评论 -
shiro学习26-shiro提供的filter-AuthorizationFilter类
这个抽象类也是继承自AccessControlFilter。他是用于处理登陆后的权限检查 他有一个属性unauthorizedUrl,表示如果没有对应的权限的话应该调到哪个页面。,这个可以不用配置,但是如果不配置的话默认为空,就会返回一个浏览器默认的401的页面。看他的子类:·HostFilter·PermissionAuthorizationFilter·PortFi...原创 2016-02-19 10:45:51 · 688 阅读 · 0 评论 -
shiro学习25-shiro提供的filter-PassThruAuthenticationFilter
PassThruAuthenticationFilter这个类是一个最终的实现类,他实现了onAccessDenied方法,实现很简单protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { if (isLoginRequest(req...原创 2016-02-19 10:46:21 · 814 阅读 · 0 评论 -
shiro学习24-shiro提供的filter-AuthenticationFilter
AuthenticationFilter是个抽象类,需要当前用户必须登录。我们看一下他的isAccessAllowed方法:protectedboolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { Subject subject = ge...原创 2016-02-19 10:46:31 · 3133 阅读 · 0 评论 -
shiro学习23-shiro提供的filter-UserFilter类
这个类的javadoc的解释说:这个filter是的判断条件是当前用户必须登录或者是通过之前的登录时的remember me可以获得principalCollection,也就是必须知道用户是谁才可以。否则返回false,即不能通过这个filter。源码如下: protected boolean isAccessAllowed(ServletRequest request, Ser...原创 2016-02-19 10:46:52 · 2471 阅读 · 0 评论 -
shiro学习22-shiro提供的filter-AccessControlFilter
这个类的javadoc中说明了这个类才是限制应用中的资源能否被访问的filter,我们先看的onPreHandle方法:publicboolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { return isAccessA...原创 2016-02-20 15:35:33 · 1883 阅读 · 0 评论 -
shiro学习19-shiro提供的filter-logoutFilter
这个类很简单,用于在退出登录时将以前登录的用户注销掉,并且重定向到配置的页面,默认的是”/”,可以改变redirectUrl这个属性,使其跳转到我们指定的页面。 看看他的preHandle方法@Override protectedboolean preHandle(ServletRequest request, ServletResponse response) thro...原创 2016-02-20 15:36:22 · 686 阅读 · 0 评论 -
shiro学习21-shiro提供的filter-AnonymousFilter
不知道你们怎么想的,反正我刚上来是没看出这个类有什么用,匿名的filter也就是不用添加拦截的路径的filter还用写吗,不把这个路径配置在shiroFilterFactoryBean中不就完了吗,而且他的onPreHandle里面直接返回的true,没有任何的判断操作,直到我看了他的javadoc才明白了作者的用意——实现更广范围中的过滤。Javadoc中的意思是这样的:假设我们有这样的...原创 2016-02-20 15:36:30 · 1138 阅读 · 0 评论 -
shiro学习00-前言
shiro是apache的一个安全架构,用来管理web应用的安全,虽然在开发中用到过,但是一直没有时间认真的从头到尾有条理的学习一下,趁现在有空,我又学习了一遍,并将笔记记录下来。我用的shiro的版本是1.2.2,官方的文档的位置是http://shiro.apache.org,建议大家先看一下官方文档,或者是读一下网上其他人写的shiro的博客,对shiro是什么优点印象。我重点讲源码...原创 2016-02-26 16:47:15 · 147 阅读 · 0 评论