首先要配置一个filter,这个filter用一个代理bean写在了spring里面,其实根正常的filter没有任何区别。
"filterInvocationInterceptor" 是一个拦截器,说是拦截器,其实就是在filter里面执行一下他的拦截方法,这里可没有什么aop.
authenticationEntryPoint 交验失败的时候转到的地方,为什么说是地方,因为通过配置可以转到其它的url甚至其它的协议下(http 转到 https等等)
这个就是失败的时候转到的地方,我们可以配置url和是否使用https
这个就是前面提到的拦截器。简单解释一下:
authenticationManager 在acegi里面的主要作用就是管理维护用户的权限角色等信息,比方说想要用户的ROLE就要在这里面拿了。里面配置了多种全县的来源,可以从DAO里面来(就是数据库里面),可以是cookies里面的,也可以是匿名的权限,每种权限都以一种Provider的形式提供:
objectDefinitionSource在acegi里面就是配置权限信息,说明哪一个url需要什么权限才能访问,acegi默认用<value>来表示,其实这正是acegi的不足之处,还好能够补救。我来说明一下:
我们知道在spring里面<value>标签比较特殊,spring首先找到这个属性的类型,然后把value里面的内容以String的类型取出来(Spring做了一下包装,为TypedString)。然后根据这个属性的类型找他的Editer,然后用Editer来处理String为需要的类型。但是我们不希望用String来表达url,很明显url里面有=就不会玩了。我们可以把这个信息写到数据库里面,然后读取,这里面不说了以前有一位高手已经解释过了。
接下来就是httpRequestAccessDecisionManager了,AccessDecisionManager在acegi里面是决策者,就是根据你所拥有的权限和访问URL需要的权限来决定你到底能不能访问。
决策者里面是投票者,这个上面已经解释过了,一个投票者校验一种权限。整个流程已经说完了。