2014-10-03 208 views
0

我有一個現有的網絡應用程序,被春季安全覆蓋。 我需要添加一個servlet(或一般端點),其工作原理是這樣的:Spring Security Servlet登錄

  • 它收到一個JSON
  • 它處理數據
  • 進行認證
  • 一個POST返回響應與其他數據。

我讀過有關春季安全(http://docs.spring.io/spring-security/site/docs/3.0.x/reference/springsecurity.html)的文件,但我對如何以及在何處執行我的代碼有點混亂。我正在考慮在階段4中使用自定義過濾器:UsernamePasswordAuthenticationFilter。但是,我並不確定,因爲如果我正確理解框架,過濾器將應用於每個請求,並且我只需登錄一次,然後接受爲已認證。

過濾器是正確的方法還是有更好的方法?

回答

0

在編寫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> 

最後,通常在處理數據之前首先進行授權。看起來很奇怪,數據將被處理,然後檢查授權以查看是否可以發送響應,但也許這只是我。

+0

「處理數據」我的意思是代碼解析json並查詢數據庫以檢查憑據。 如果我沒有正確地理解,你建議使用映射到我的servlet/service的url上的BasicAuthenticationEntryPoint,對吧? – 2014-10-09 08:42:31