2017-06-02 77 views
0

这是我为每个HTTP请求附加keycloak令牌的角度配置。Keycloak角度应用文件上传不发送令牌

module.factory('authInterceptor', function($q, Auth) { 
    return { 
     request: function (config) { 
      var deferred = $q.defer(); 
      if (Auth.authz.token) { 
       Auth.authz.updateToken(5).success(function() { 
        config.headers = config.headers || {}; 
        config.headers.Authorization = 'Bearer ' + Auth.authz.token; 
        deferred.resolve(config); 
       }).error(function() { 
         deferred.reject('Failed to refresh token'); 
        }); 
      } 
      return deferred.promise; 
     } 
    }; 
}); 
module.config(["$httpProvider", function ($httpProvider) { 
    $httpProvider.interceptors.push('authInterceptor'); 
}]); 

这是我发送到后端的请求。这似乎没有添加keycloak标记的请求,所以我得到403禁止错误。

var formData = new FormData(file); 
formData.append('file', file); 
return $http({ 
    method: 'POST', 
    url: API_BASE + '/uploadEmployeeDetails/excelUpload', 
    headers: { 
    'Content-Type': undefined 
    }, 
    data: formData, 
    transformRequest: function(data, headersGetterFunction) { 
    return data; 
    } 
}); 

后端安全配置enter image description here

+0

当我改变了POST方法来获得两个后端和前端将解决403禁止性问题。那么为什么POST方法会产生禁止的错误? – boycod3

+0

你的后端如何受到保护? –

+0

后端是仅受保护的承载。 – boycod3

回答

1

因为你可以到token发送到后端,你可以从浏览器的网络选项卡中看到。

的问题是在api侧处理csrf token

如果csrf token是默认启用的,你应该禁用它。

这里是你的帮助的代码,来禁用它

http.csrf().disable(); 
http.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class) 
.authorizeRequests().antMatchers("/**") 
.hasAnyRole("ORG_ADMIN", "EMPLOYEE", "PARENT", "STUDENT") 
.anyRequest().permitAll();