Spring boot 从spring zuul筛选器重定向到远程URL

Spring boot 从spring zuul筛选器重定向到远程URL,spring-boot,single-sign-on,netflix-zuul,Spring Boot,Single Sign On,Netflix Zuul,我正在尝试使用zuul代理服务器实现一个API网关。 基本上,我想要实现的是,当客户端通过网关向资源服务器发送请求时,网关只需检查客户端会话是否存在,如果不存在,它将重定向到SSO服务器进行身份验证。但是,Zuul筛选器总是进入资源服务器,而不重定向到SSO服务器 下面是重定向到远程SSO的截取代码 public Object run() { try { RequestContext context = RequestContext.getCurrentContext()

我正在尝试使用zuul代理服务器实现一个API网关。 基本上,我想要实现的是,当客户端通过网关向资源服务器发送请求时,网关只需检查客户端会话是否存在,如果不存在,它将重定向到SSO服务器进行身份验证。但是,Zuul筛选器总是进入资源服务器,而不重定向到SSO服务器

下面是重定向到远程SSO的截取代码

public Object run() {
    try {
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = RequestContext.getCurrentContext().getRequest();
        HttpServletResponse response = RequestContext.getCurrentContext().getResponse();
        // step 1: check to see whether session exist, if not redirect to federation for authentication
        // if session already exist then adding sessionId to cookie to forwarding to targeting service


       // TODO: comment out for now.
        HttpSession currentSession = context.getRequest().getSession(false);
        String samlAuthenWithRelayUrl = populateFedUrlWithRelay(request);


        if (currentSession==null){

            // redirect to federation with relay URL
            context.setRouteHost( new URL(samlAuthenWithRelayUrl));
           //response.sendRedirect(samlAuthenWithRelayUrl);
        } else{
            HttpSession httpSession =request.getSession();
            context.addZuulRequestHeader(AppConstants.PHOENIX_COOKIE, "SESSION=" +  httpSession.getId());

        }

    } catch (Exception ex) {
        log.error(ex.getMessage(), ex);

        //  redirect to error page
    }

    return null;

}

请告知是否有任何缺少的部分可以实现我的目标,谢谢。

API网关不应重定向到单点登录服务,IMO。网关不打算从浏览器访问,而是从REST客户端库或类似工具访问。如果身份验证失败,它应该返回响应,而不是

UNRELATED:如果您有某种使用RESTAPI(如JSF)的服务器端web UI框架,请阅读。

对于对视图(UI服务)的请求,我在Zuul和KeyClope SSO上也遇到了类似的问题。我只是无法让Zuul背后的UI服务正确执行OpenIdConnect标准流。最后,我只为restapi使用了Zuul,并让最终用户浏览器直接向UI服务发出请求(我只有一个实例)


这里有我在中描述的问题,并在此Github repo中修复它。

API网关永远不应该重定向到单点登录服务IMO。网关不打算从浏览器访问,而是从REST客户端库或类似的工具访问。如果身份验证失败,它应该返回响应,而不是

UNRELATED:如果您有某种使用RESTAPI(如JSF)的服务器端web UI框架,请阅读。

对于对视图(UI服务)的请求,我在Zuul和KeyClope SSO上也遇到了类似的问题。我只是无法让Zuul背后的UI服务正确执行OpenIdConnect标准流。最后,我只为restapi使用了Zuul,并让最终用户浏览器直接向UI服务发出请求(我只有一个实例)


这里有我在中描述的问题,并在这个Github repo中修复它。

基本上,我想构建zuul网关,在网关上进行身份验证,而不是在每个相应的微服务上,我们使用SSO来验证请求用户我们的设计:1。创建zuul筛选器以验证用户会话是否存在,如果不只是重定向到SSO的话。2.SSO将验证请求并将令牌返回到网关,并有一个服务器来处理返回的令牌,如果令牌有效,Servlet将重定向到相应的服务。这种方法有什么问题吗?如果没有,还有更好的方法吗?我们希望实现与下面的link[link]类似的功能,但不明白为什么zuul filter不重定向到远程URL,正如我在回答中所写的,重定向只对浏览器有效。在第一点中,您告诉您重定向到SSO,但从重定向响应访问SSO是web浏览器在单独请求中执行的操作。所以我不会对所有的请求都这么做。似乎您需要区分RESTAPI目标请求和基于UI的请求,而且您没有在代码中说明行为。你做过一些调试吗?您的浏览器控制台中的请求-响应历史记录是什么?基本上,我想构建zuul网关,其中身份验证将在网关上进行,而不是在每个相应的微服务上进行,我们使用SSO来验证请求用户我们的设计:1。创建zuul筛选器以验证用户会话是否存在,如果不只是重定向到SSO的话。2.SSO将验证请求并将令牌返回到网关,并有一个服务器来处理返回的令牌,如果令牌有效,Servlet将重定向到相应的服务。这种方法有什么问题吗?如果没有,还有更好的方法吗?我们希望实现与下面的link[link]类似的功能,但不明白为什么zuul filter不重定向到远程URL,正如我在回答中所写的,重定向只对浏览器有效。在第一点中,您告诉您重定向到SSO,但从重定向响应访问SSO是web浏览器在单独请求中执行的操作。所以我不会对所有的请求都这么做。似乎您需要区分RESTAPI目标请求和基于UI的请求,而且您没有在代码中说明行为。你做过一些调试吗?浏览器控制台中的请求-响应历史记录是什么?