Java 如何将授权令牌从webapp传递到rest服务
我在Jetty中部署了一个JS应用程序。我通过在jettyJava 如何将授权令牌从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
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,而不是在缓存中设置访问令牌