Java 如何将授权令牌从webapp传递到rest服务

Java 如何将授权令牌从webapp传递到rest服务,java,ajax,rest,jetty,keycloak,Java,Ajax,Rest,Jetty,Keycloak,我在Jetty中部署了一个JS应用程序。我通过在jettyWebAppContext WebAppContext wac = null; String webAppPath = "/../../server/webapp/mywebapp"; wac = new WebAppContext(webAppPath, "/mywebapp"); wac.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherTyp

我在Jetty中部署了一个JS应用程序。我通过在jetty
WebAppContext

WebAppContext wac = null;

String webAppPath = "/../../server/webapp/mywebapp";            
wac = new WebAppContext(webAppPath, "/mywebapp");
wac.addFilter(GzipFilter.class, "/*", EnumSet.allOf(DispatcherType.class));
wac.setParentLoaderPriority(true);
context.setSecurityHandler(keycloakSecurity);
当我访问上面的webapp url时,flow工作正常,系统会提示我进行身份验证,当身份验证成功时,我会被重定向到webapp。 但是,这个webapp(ajax调用)对服务器进行的任何rest调用(也通过keydepot进行保护)都是未经授权的(401)

我是否需要在ajax调用中显式设置授权头或在
WebAppContext
中启用安全处理程序就足够了,而且我缺少一些配置?

(如果我直接向他们发送令牌,但不是通过上面的webapp自动发送令牌,则可以访问其余通话)

在angular JS中,我使用的是
RestAngular
,如下所示:

app.factory('DesignVaultRestangular', ['Restangular', '$location', function(Restangular, $location) {
  var url = baseURL;
  var location = $location.search();
  if (location && location.url)
    url = location.url;
  url = url + '/api/secured/';
  return Restangular.withConfig(function(RestangularConfigurer) {
    RestangularConfigurer.setBaseUrl(url);
    RestangularConfigurer.setDefaultHeaders({
      'Content-Type': 'application/json',
      'withCredentials': true
    });
  });
}]);
编辑:请求标题


无论您是通过URL访问还是通过ajax调用访问,都需要授权头

您可以按照下面提到的格式将HTTP授权头与您的请求一起传递。不同的API和工具有不同的方式来设置HTTP头

     Authorization: <authorization scheme>  < authorization parameters >
授权:
请注意,凭据是根据以下行中的要求设置的。如果不需要,您需要更改它
“withCredentials”:true

您能尝试删除默认标题配置部分吗?@camileviet在您的回答之后,我只是在默认标题中设置内容类型标题。已从标头中删除withCredentials。如果您使用Spring Security Adapter for keycloack,则JSSessionID跟踪的会话应包含安全上下文,因此您不需要传递授权标头。@CamilleVienot不,我没有使用Spring Security jetty适配器也依赖JSSessionID,如果KeyClope Conf中的Bearner only设置为false,请解释“如果不需要,则需要更改”这一行。此外,我如何明确设置令牌。我知道可以这样做:
Authorization:Bearer
,但keydape只是在浏览器缓存中设置一个jSessionId,而不是在缓存中设置访问令牌