- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ReSTLet 框架构建一个 RESTful API,需要它来处理跨域调用 (CORS) 以及基本身份验证。
目前我正在使用 CorsFilter它负责使我的网络服务支持 CORS 请求。但是,当我尝试将其与具有 HTTP 基本身份验证的简单 ChallengeAuthenticator 一起使用时,它不会像我希望的那样工作(来自网站)。
当我通过 Chrome 直接访问网络服务时,它按预期工作,但是当我在一个用 angularjs (jquery/javascript) 编写的小型网络应用程序中尝试它并尝试访问网络服务时,它没有。
基本上发生的事情是,当一个 OPTIONS 请求被发送到我的网络服务时,它不会响应 header :'Access-Control-Allow-Origin'、'Access-Control-Allow-Credentials' 等。 .相反,它发送一个带有 HTTP 状态代码 401 的响应,表示身份验证失败。这是因为身份验证器以某种方式覆盖了 CorsFilter 吗?
我的createInboundRoot 方法如下所示。
@Override
public Restlet createInboundRoot() {
ChallengeAuthenticator authenticator = createAuthenticator();
RoleAuthorizer authorizer = createRoleAuthorizer();
Router router = new Router(getContext());
router.attach("/items", ItemsServerResource.class);
router.attach("/items/", ItemsServerResource.class);
Router baseRouter = new Router(getContext());
authorizer.setNext(ItemServerResource.class);
authenticator.setNext(baseRouter);
baseRouter.attach("/items/{itemID}", authorizer);
baseRouter.attach("", router);
// router.attach("/items/{itemID}", ItemServerResource.class);
CorsFilter corsFilter = new CorsFilter(getContext());
corsFilter.setNext(authenticator);
corsFilter.setAllowedOrigins(new HashSet(Arrays.asList("*")));
corsFilter.setAllowedCredentials(true);
return corsFilter;
}
(授权者和认证者代码取自“官方”reSTLet 授权和认证指南)
我已经尝试对我的代码进行大量更改,但没有一个给我任何运气。但我注意到,当将 ChallengeAuthenticator 中的参数“可选”设置为 true("Indicates if the authentication success is optional")时,CorsFilter 完成了它的工作,但显然 ChallengeAuthenticator 并不关心对客户端进行身份验证并让任何东西使用 protected 资源..
有人遇到过类似的问题吗?或者您是否以任何其他方式解决了这个问题(ReSTLet 中的 CORS + 身份验证)?
提前致谢!
最佳答案
我认为这是 ReSTLet CORS 过滤器的错误。事实上,过滤器使用方法 afterHandle
来设置 CORS header 。查看源代码:https://github.com/restlet/restlet-framework-java/blob/4e8f0414b4f5ea733fcc30dd19944fd1e104bf74/modules/org.restlet/src/org/restlet/engine/application/CorsFilter.java#L119 .
这意味着 CORS 处理是在执行整个处理链(身份验证,...)之后完成的。因此,如果您的身份验证失败,您将获得状态代码 401。实际上就是这种情况,因为 CORS 预检请求不会发送身份验证提示。
有关在 ReSTLet 中使用 CORS 的更多详细信息,您可以查看此链接:https://templth.wordpress.com/2014/11/12/understanding-and-using-cors/ .在 ReSTLet 本身修复此错误之前,这可以为您提供解决方法。
我在 Github 上为你的问题开了一个问题:https://github.com/restlet/restlet-framework-java/issues/1019 .
希望对你有帮助蒂埃里
关于angularjs - 带有 ChallengeAuthenticator 的 ReSTLet CorsFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28196426/
有没有写的理由 corsFilter.setAllowedOrigins(new HashSet(Arrays.asList("*"))); 其中allowedOrigins在ReSTLet框架中的定
我正在开发一个具有安全功能的 Spring Boot Web 应用程序。我依赖于一个带有我需要使用的自定义 Cors 过滤器的库,但我的应用程序不断选择 Spring Web Framework Co
我正在使用 ReSTLet 框架构建一个 RESTful API,需要它来处理跨域调用 (CORS) 以及基本身份验证。 目前我正在使用 CorsFilter它负责使我的网络服务支持 CORS 请求。
我正在使用 resteasy-jaxrs - 3.0.9.FINAL。我有两个单独的 javax.ws.rs.core.Application @ApplicationPath("oauth") pu
我尝试使用 Resteasy 3.0.9 中提供的新 CorsFilter。我在本页底部找到了一个示例: Ajax request with JAX-RS/RESTEasy implementing
我有这个 Java Thorntail 应用程序,我想在其中捕获所有未捕获的异常。 我想用 500 来响应,而不是 JAXRS 提供的默认错误页面,所以我只使用 ExceptionMapper 的实现
我有一个在 WebLogic Server 版本上运行的 SpringBoot 应用程序:12.2.1.3.0当我定义自定义 servlet Filter 时,它在嵌入式 Tomcat 上工作正常。但
我已经使用 Wildfly Swarm 开发了 REST API,我想引入 CORS 过滤器,我的要求是所有 header /值都应该在外部资源中进行配置。 我已经实现了 CORSFilter 但具有
我正在尝试将 CORS 过滤器添加到我的 Lagom Framework REST API 中。我按照文档添加了一个 Filters 类,但是它找不到 CROSSFilter 的包。需要MAVEN依赖
我正在尝试使用以下类为我的 java servlet 启用 CORS: package com.prosperity.mobile.core; import java.io.IOException;
我正在使用 Spring Boot 构建 API 服务。它使用基本身份验证进行身份验证。当客户端尝试连接到 API 时,他们将收到 CORS 错误 . 在 Spring Boot 上,它抛出错误 ja
我正在尝试将 CORS 过滤器添加到我的 Play Framework REST API。我根据 documentation 添加了一个 Filters 类,但是它似乎根本找不到以下包,我搜索了高低,
我想禁用我的前端写在Angular的CORS,运行在本地端口4200上。我创建了一个配置,但它似乎不工作。。在尝试启动应用程序后,我在使用Spring Security6时收到以下错误:。我正在遵循这
我想为在本地端口4200上运行的以角度编写的前端禁用CORS。我创建了一个配置,但它似乎不起作用。。在尝试启动应用程序后,我在使用Spring Security6时收到以下错误:。我正在遵循这个答案和
我是一名优秀的程序员,十分优秀!