我想创建一个具有以下功能的 Struts2 Web 应用程序:
如果用户 A 正在登录,那么他可以访问应用程序,例如
http://product.com/a/login.jsp
如果用户 B 正在登录,则
http://product.com/b/login.jsp
等等。
我怎样才能做到这一点?
这样做好吗?或者我可以使用子域吗?
我想创建一个具有以下功能的 Struts2 Web 应用程序:
如果用户 A 正在登录,那么他可以访问应用程序,例如
http://product.com/a/login.jsp
如果用户 B 正在登录,则
http://product.com/b/login.jsp
等等。
我怎样才能做到这一点?
这样做好吗?或者我可以使用子域吗?
我很确定它不会像那样工作:在 GMail 中(你以你为例),每个用户在登录后总是会被重定向到同一个位置:
如果您启用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
第二个帐号邮箱地址
一旦对它们进行了身份验证,您就可以通过简单地访问相对 URL 来手动在不同邮箱之间切换(如果您有多个帐户,请尝试)。
结论:Google 使用不同的 Rest URL(带有命名变量,在本例中为u
:用户)来区分多个帐户......对于同一台 PC。附加值是您可以在多个帐户之间切换,而无需每次注销第一个并登录到第二个。
这与分离 URL 以处理不同计算机上的不同帐户无关。
您必须实施过滤器,然后检查请求并重定向到正确的视图。
不要使用根据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...)