2013-04-24 56 views
0

我正在編寫移動應用程序的Web服務。以編程方式在spring中以spring安全登錄用戶並返回sessionId

應用程序必須authenticité 其實我的第一種方法是做一個POST請求上j_spring_security_check使用參數:

爲j_username =名爲myUsername

爲j_password =輸入mypassword

阿賈克斯=真

並通過在登錄控制器中執行這些更改來恢復sessionId

def ajaxSuccess = {  
    .... 
    result.token = springSecurityService.authentication.details.sessionId 
    render(result as JSON) 
} 

是否有任何其他的方式做認證程序,並用自己的控制器返回SessionID的,所以我可以自定義的身份驗證方法(例如我想,當我登錄到更新其他參數)

+0

請查看http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-namespace.html#nsa-form-login – allthenutsandbolts 2013-04-24 17:10:55

+2

更好的方法是實現您的自己的AuthenticationSuccessHandler並在那裏進行自定義工作,而不是重寫整個認證過程。見http://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/7%20Events.html – Gregg 2013-04-24 19:30:32

回答

0

如果額外的參數依賴於用戶輸入,你幾乎肯定必須提供一個自定義登錄。如果這些參數將與用戶分開管理,我不明白爲什麼你不能在控制器類中通過填充自定義用戶詳細信息對象。同時,您可以通過RequestContextHolder.currentRequestAttributes().getSessionId()(無恥地從here盜取)獲得會話ID。

+0

是@cabbagery,額外的參數依靠用戶輸入,但我不能瞭解如何進行自定義登錄,這就是爲什麼我想以編程方式登錄並獲取sessionId的原因 – 2013-04-25 08:25:44

+0

我懷疑你應該很容易地使用自定義參數構建登錄頁面,讓它提交給控制器,並且將請求(使用登錄憑證)重定向到實際的身份驗證處理程序。實際上,您應該能夠以兩種方式執行此操作 - 首先處理額外的參數,然後登錄第二個,或者先登錄,然後再處理額外的參數。會話ID不應該成爲這裏的絆腳石,但我可能不完全瞭解您的需求。 – cabbagery 2013-04-25 21:21:52