1

我想创建一个具有以下功能的 Struts2 Web 应用程序:

  • 如果用户 A 正在登录,那么他可以访问应用程序,例如

    http://product.com/a/login.jsp
    
  • 如果用户 B 正在登录,则

    http://product.com/b/login.jsp
    

等等。

我怎样才能做到这一点?

这样做好吗?或者我可以使用子域吗?

4

2 回答 2

1

我很确定它不会像那样工作:在 GMail 中(你以你为例),每个用户在登录后总是会被重定向到同一个位置:

https://mail.google.com/mail/

如果您启用Google Multiple Sign-In,它们将分别存储不同的登录凭据服务器端,并将使用不同的 cookie 客户端,具有相同的名称但不同的路径:

用于第一个帐户登录的 Cookie:

Name    : S 
Content : gmail=someRandomHash
Server  : mail.google.com
Path    : /mail/u/0

用于第二个帐户登录的 Cookie:

Name    : S 
Content : gmail=someRandomHash
Server  : mail.google.com
Path    : /mail/u/1

然后,当从一个帐户切换到另一个帐户时,他们会将您重定向到另一个 URL:

第一个帐户邮箱 URL

https://mail.google.com/mail/u/0/

第二个帐号邮箱地址

https://mail.google.com/mail/u/1/

一旦对它们进行了身份验证,您就可以通过简单地访问相对 URL 来手动在不同邮箱之间切换(如果您有多个帐户,请尝试)。

结论:Google 使用不同的 Rest URL(带有命名变量,在本例中为u:用户)来区分多个帐户......对于同一台 PC。附加值是您可以在多个帐户之间切换,而无需每次注销第一个并登录到第二个。

这与分离 URL 以处理不同计算机上的不同帐户无关。

于 2013-08-01T15:12:36.023 回答
0

您必须实施过滤器,然后检查请求并重定向到正确的视图。

不要使用根据https://issues.apache.org/jira/browse/WW-3742弃用的内容:

    FilterDispatcher(Deprecated)

我建议:

    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 

首先,正如我所说,您将需要以下请求:

  HttpServletRequest request = ServletActionContext.getRequest();

然后找到这样的请求 URL:

  String spath = request.getServletPath();

现在您解析您的 URL,然后转发到正确的视图(页面:jsp,html...)

于 2013-08-01T12:59:14.280 回答