【问题标题】:Redirect to Angular route from JAX-RS ContainerRequestFilter从 JAX-RS ContainerRequestFilter 重定向到 Angular 路由
【发布时间】:2021-03-10 06:01:07
【问题描述】:

谁能告诉我,如何从 JAX-RS ContainerRequestFilter 重定向到特定的 Angular 路由?我在某处读到我需要 Angular 端的拦截器来执行此操作。 谁能指导我一些示例代码?

背景:
我有一个需要与客户端的单点登录服务交互的应用程序。 我首先从 Angular 向服务发送请求。该服务将登录页面呈现给用户。 成功登录后,该服务通过 POST 调用重定向到我的应用程序。此调用由 ContainerRequestFilter 处理,我在其中提取 来自呼叫的用户信息并创建用户会话。最后,我需要通过特定的 Angular 路由从过滤器重定向回应用程序的主页。场景就像这张照片。

目前,在containerrequestfilter中filter()方法的最后,我尝试这样重定向,但似乎没有到达Apache上部署的Angular层。

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    
    if (requestContext.getUriInfo().getPath().equals("ssoauthenticate")) {

        // do miscellaneous steps related to user session creation
 
        requestContext.setRequestUri(URI.create("https://helloworld.net/MyApp/#/home"));
        
        return;     

    }

【问题讨论】:

    标签: angular filter jax-rs


    【解决方案1】:
    requestContext.setRequestUri(URI.create("https://helloworld.net/MyApp/#/home"));
    

    这绝对没有任何作用。您所做的只是为当前请求设置 URI。此 URI 仅供服务器使用。如果你想要一个真正的重定向,你想要的是使用 HTTP 重定向协议,它由一个 3031 状态码和一个带有要重定向到的 URI 的 Location 标头组成。要在 ContainerRequestFilter 中实现这一点,您可以使用 Response 中止请求。

    requestContext.abortWith(
            Response.seeOther(URI.create("https://helloworld.net/MyApp/#/home"))
                    .build());
    return;
    

    这会将状态设置为303,并将Location 标头设置为您指定的标头。如果浏览器工作正常,用户应该被重定向到 URI。


    1。还有其他重定向状态代码(都在 3xx 系列中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-27
      • 2014-02-28
      • 2012-03-15
      • 2017-08-10
      • 2013-10-29
      • 1970-01-01
      相关资源
      最近更新 更多