而投票者呢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>/failure
html</value></property><!
登陸失敗轉向的頁面
>
<property name=
defaultTargetUrl
><value>/ok
html</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 )) {//從這裡可以看到一般的登陸基本認證是不起作用的
[] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28994.html