【问题标题】:Spring MVC RedirectView to AngularJS URL with parametersSpring MVC RedirectView 到带有参数的 AngularJS URL
【发布时间】:2015-02-10 21:47:34
【问题描述】:

我正在尝试将我的用户重定向到 AngularJS 样式的 URL:

http://somedomain.com/#/oauth/authorize

我有一些参数要通过我的模型添加到 URL。到目前为止,如此标准。直到 Spring MVC 在第 400 行的 RedirectView 内部发生了一个黑暗而险恶的转变。如果您单击该链接,您将看到以下评论:

// Append anchor fragment, if any, to end of URL.

不!这对 AngularJS 不利!这将使我通常美丽的重定向:

http://somedomain.com/#/oauth/authorize?query=params

看起来像:

http://somedomain.com/?query=params#/oauth/authorize

这是一个糟糕的juju!

所以我有两个问题:

  1. 这种锚点和查询参数的排列有什么用途。
  2. 我该如何绕过这个恶魔般的机器?

感谢您的帮助!

【问题讨论】:

    标签: java angularjs spring spring-mvc


    【解决方案1】:

    我觉得这样做后我需要洗个澡,但这是一个可能的解决方案。

    在创建用于配置$routeProvider 的模块之前,将其放在主脚本(即app.js)中。

    var urlLoaded = window.location.href;
    var qIndex = urlLoaded.indexOf('?');
    var hashIndex = urlLoaded.indexOf('#');
    
    if (qIndex !== -1 && hashIndex !== -1 && qIndex < hashIndex) {
    
        var correctedPath = urlLoaded.substring(hashIndex);
        var correctedParams = urlLoaded.substring(qIndex, hashIndex);
        var base = urlLoaded.substring(0, qIndex);
        var correctedUrl = base + correctedPath + correctedParams;
    
        window.location.href = correctedUrl;
    }
    

    【讨论】:

      【解决方案2】:
      • 如果您处于早期阶段,我会考虑使用 HTML5 pushState。这样你就可以像使用它们一样使用锚点,并且你的 url 看起来会更干净。对此存在浏览器限制以及其他注意事项,但正确安装它可能会节省您再次遇到此问题的时间。

      • 您可以扩展此类,覆盖该方法,并将其修复为比当前更智能。用 spring 注册它(它可能需要几个覆盖,看看 ViewControllerRegistry),如果你感觉不错,提交一个 Pull Request 看看他们是否想要它。

      • 按照@hartz1989 的建议,将该 URL 打回 Angular 提交

      • 您可以使用具有重定向 url 的查询参数进行响应,而不是进行重定向,并添加一个可以理解这一点并执行“重定向”的 Angular 处理程序。我不太喜欢这个主意,但这是另一个主意。

      【讨论】:

      • 感谢您的回复! Angular 中的 pushState 似乎无法与 AWS 的 CloudFront 配合使用——不幸的是,我无法进行任何 URL 重写。 #2 是我正在研究的一个选项。 #3 是我采用的短期修复方法。 #4 不是我的特定用例的选项,因为重定向在 Spring Security OAuth2 的机器中很深。但我也可以随时在那里提交拉取请求。
      猜你喜欢
      • 2014-02-16
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 2012-04-29
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多