而投票者呢Acegi自己实现了一个投票者的类RoleVoter现在我用第一种方案RoleVoter只是在URL对应的用户组里有ROLE_为前缀的才进行投票否则的话弃权(我们也可以在配置RoleVoter的时候把ROLE_配置成为别的前缀如JAVA_)分别对URL对应的每个用户组投票如果用户在这个用户组里就投赞成不在投反对(在用户组的前缀是ROLE_的前提下)这样就不难体会第三种方案的用途了吧
<bean id=
roleVoter
class=
org
acegisecurity
vote
RoleVoter
>
<property name=rolePrefix>
<value>ROLE_</value><! 可以改成别的 >
</property>
</bean>
这样认证管理器和授权管理器就ok了别的无论是过滤器还是拦截器都会用到它们两个因为它们都要验证而这两个就是凭证
那么那两个访问过滤器呢先说authenticationProcessingFilter是用于表单登陆的
<bean id=
authenticationProcessingFilter
class=
org
acegisecurity
ui
webapp
AuthenticationProcessingFilter
>
<property name=authenticationManager><ref bean=authenticationManager/></property>
<property name=authenticationFailureUrl><value>/failurehtml</value></property><!登陆失败转向的页面 >
<property name=defaultTargetUrl><value>/okhtml</value></property><! 登陆成功转向的页面 >
<property name=filterProcessesUrl><value>/check</value></property><! 要验证的地址 >
</bean>
这样的话加上上面配置的认证管理器就已经可以处理登陆了(注意的是它没有用到授权管理器因为它只是个访问入口还没有权限的授予)
再说一下HTTP基本认证它比上面的略复杂一点
需要配置一个
<bean id=
BasicProcessingFilterEntryPoint
class=
org
acegisecurity
ui
basicauth
BasicProcessingFilterEntryPoint
>
<property name=realmName><value>javafish</value></property><! 基本认证对话框上显示的字 >
</bean>
然后
<bean id=
BasicProcessingFilter
class=
org
acegisecurity
ui
basicauth
BasicProcessingFilter
>
<property name=authenticationManager>
<ref bean=authenticationManager/>
</property>
<property name=authenticationEntryPoint>
<ref bean=BasicProcessingFilterEntryPoint/>
</property>
</bean>
即可
不过在HTTP基本认证里需要注意的地方是好多人配置好了怎么看不到效果啊一开始我也是很郁闷看了BasicProcessingFilter的源代码
String header = httpRequestgetHeader(Authorization)//我们一般进入网页测试的时候这里的header始终是null的
if (loggerisDebugEnabled()) { loggerdebug(Authorization header: + header); }
if ((header != null) && headerstartsWith(Basic )) {//从这里可以看到一般的登陆基本认证是不起作用的
[] [] [] [] [] []