2015-11-18 155 views
0

我使用彈簧4.2.1使用Spring Security 4.0.2春季安全,對JSON的RESTful Web服務

在登錄時,我需要一個JSON對象樹返回給客戶端,包含緩存的數據編程它登陸會議需要。

所以我已經添加了以下方法:

@RequestMapping(value = "/login", method = RequestMethod.POST) 
public @ResponseBody ServerResponse<?> login(@RequestBody LoginRequest loginRequest, HttpServletRequest request, HttpServletResponse response) { 

     UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword()); 

    Authentication result = authenticationManager.authenticate(token); 

    SecurityContextHolder.getContext().setAuthentication(result); 

    Object data = null; // Do stuff here 

    return new ServerResponse<>(data); 
} 

我春天的安全配置:

<ss:http auto-config="false" use-expressions="true" entry-point-ref="authenticationEntryPoint"> 

    <ss:anonymous enabled="false" /> 
    <!-- this is enabled by default in spring 4 --> 
    <ss:csrf disabled="true" /> 

    <ss:custom-filter position="FORM_LOGIN_FILTER" ref="myAuthFilter" /> 

    <ss:session-management session-authentication-strategy-ref="sas" /> 

    <ss:port-mappings> 
     <ss:port-mapping http="8080" https="8443" /> 
    </ss:port-mappings> 

    <ss:intercept-url pattern="/app/logi**" access="permitAll()" /> 
    <ss:intercept-url pattern="/app/logou**" access="permitAll()" /> 

    <ss:intercept-url pattern="/app/**" access="hasAuthority('user')" /> 
    <ss:intercept-url pattern="/www/**" access="hasAuthority('user')" /> 
</ss:http> 

我所找到的網頁有關的綱領性登錄確認我在做什麼是好的。

然而,當我嘗試另一個Web服務方法再打,我得到403作爲客戶端沒有登錄。

我讀了一些模糊的引用不必使用彈簧過濾器,但我不知道在成功登錄後,如何讓過濾器將json樹返回給客戶端。

任何建議或指向如何做到這一點的例子的鏈接將不勝感激。

感謝

回答

0

的sooo原來的問題是,我是在做跨源資源共享和瀏覽器不跨越下一個請求發送該cookie。

基本上我打電話從HTML文件系統上的服務器(與原始文件://)

我正在處理的選項調用,但我並沒有在發回

Access-Control-Allow-Credentials true 

頭反應,我不得不角度配置通過傳遞標誌

withCredentials: true 

在配置對象$ http.post

發送的cookie