在編寫Web服務時,最好每個請求重新授權客戶端。這意味着客戶端必須每次都傳遞其憑據(用戶名/密碼)。
順便說一句,如果你正在編寫一個web服務,那麼最好使用基於ssl的BasicAuthenticationEntryPoint而不是UsernamePasswordAuthenticaitonFilter。
但是,爲了充分回答您的問題,我們使用了安全/ http模式匹配器來實現這一訣竅。
<security:http pattern="/api/**" create-session="stateless" access-decision-manager-ref="unanimousBased" entry-point-ref="authenticationEntryPoint" >
<security:intercept-url pattern="/api/**" access="IS_AUTHENTICATED_FULLY,group_User_role_default" />
<security:custom-filter ref="basicAuthenticationFilter" after="BASIC_AUTH_FILTER" />
</security:http>
<bean id="basicAuthenticationFilter" class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager" />
<property name="authenticationEntryPoint" ref="authenticationEntryPoint" />
</bean>
<bean id="authenticationEntryPoint" class="org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint">
<property name="realmName" value="api" />
</bean>
最後,通常在處理數據之前首先進行授權。看起來很奇怪,數據將被處理,然後檢查授權以查看是否可以發送響應,但也許這只是我。
「處理數據」我的意思是代碼解析json並查詢數據庫以檢查憑據。 如果我沒有正確地理解,你建議使用映射到我的servlet/service的url上的BasicAuthenticationEntryPoint,對吧? – 2014-10-09 08:42:31