外部认证后返回请求的页面

时间:2014-10-22 11:47:37

标签: angularjs spring

所以我有一个使用外部身份验证的应用程序。有类似的东西:

public class MyFilter extends GenericBeanFilter {
...

    doFilter (...) {
        if (needAuth) {
            String url = request.getRequestURL();
            // some code that saves this url to use after login
            response.sendRedirect();
            return;
        }
    }

我目前的问题是验证后用户返回默认页面。 这是因为此课程中首次请求的网址始终为' {host} /index.html'。 这似乎是很平常的情况,但我找不到任何关于它的事情。

如果我删除身份验证,我认为会发生什么: 1.浏览器拨打电话即{host} / country / city 2. Spring中的某些东西处理此请求并执行某种重定向,因此: 3.浏览器拨打{host} /index.html    浏览器拨打电话{host} / * .js    ... 4. Angularjs拨打电话{host} / country / city

可能是,问题是谁在Spring处理第一个请求?

可能以上就是因为网址我使用caontains#:' localhost /#/ groups' ...即使关闭了服务器,Chrome也会首先拨打本地主机' 。 (对于' localhost / groups'第一个电话是' localhost / groups')嗯......

2 个答案:

答案 0 :(得分:1)

当您谈到重定向到请求的页面时。你的意思是Angular路线吗?:

index.html/#/whatever

如果是这样,那么我认为spring不会处理碎片(#之后的东西)。您必须手动将Angular路由传递到服务器,以便在用户登录后重定向。

答案 1 :(得分:1)

您需要在一个请求中使用之前存在的信息。由于HTTP是未连接的协议,因此无法直接使用。

恕我直言,您应该在重定向到登录页面之前使用会话属性存储初始请求的URL。然后,在成功进行身份验证后,您可以重定向到会话中可用的已保存URL,然后将其从会话中删除。

algorythme很简单:

  • 在重定向到登录之前:
    • 如果请求的页面特殊(登录,注销)但通过过滤器不保存
    • 如果已保存的内容(属性存在且不为空):保持不变
    • else存储请求的网址
  • 验证成功后
    • 如果会话属性存在且不为空,则重定向到保存的URL
    • 其他重定向到默认网址(/index.html

您还可以使用替代方法,例如在初始重定向的参数中传递已保存的URL,或使用不会重定向但仅提供非经过身份验证的的spring应用程序以角度级别管理所有内容>回应。但是恕我直言,会话属性在你的spring应用程序中更容易实现