具有多个域的Web应用程序指向父文件夹的子文件夹
问题描述:
我正在开发一个Spring Boot的应用程序,该应用程序在域下运行,假设;具有多个域的Web应用程序指向父文件夹的子文件夹
parentdomain.com
从一个侧面用户输入他们的内容,登录,在parentdomain.com/admin后。这个内容经过处理后可以在子文件夹中公开访问,比方说;
parentdomain.com/user-one-content
parentdomain.com/user-two-content and so on.
我需要为每个用户域名指向自己的文件夹,例如:
userone.com should be equivalent to parentdomain.com/user-one-content
导航应该留在userone.com网站。
userone.com/first-page应该打开parentdomain.com/user-one-content/first-page。
现在应用程序安装在PWS(Pivotal Web Services)上,但它们的路由系统并未提供此方法的解决方案,其中多个域指向父文件夹的子文件夹。
如何归档此功能?
答
我会单独离开Spring Boot并把它放在它前面的Web服务器上。你可以安装Apache或Nginx吗?域/子域重新路由在它们两者中都是开箱即用的。
答
最后我可以从gspatel
存档,感谢咨询随着PWS生根系统或其他IaaS的云服务提供商,我可以每根域到整个应用程序。
实现HandleInterceptor的preHandle方法,我检查请求是否来自我的域(示例中的parentdomain.com
)。或者,如果它来自网站的某个域,则说明该应用正在投放(示例中为userone.com
)。在这种情况下,我控制不访问parentdomain.com或其他用户的内容,将请求转发到用户主页(示例中的user-one-content
)。
这是一个提取物,我preHadle执行:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
...
String URI = request.getRequestURI();
String rootURI = "/" + idweb + "/";
if(URI.equals("/") || !URI.startsWith(rootURI)){
URI = rootURI;
RequestDispatcher requestDispatcher = request.getRequestDispatcher(request.getContextPath() + URI);
requestDispatcher.forward(request, response);
}
return true;
}
推荐Web服务器是Tomcat的,尽管它可以在其他的人,只要他们能够处理的Java Servlet的运行。 也许Apache或Nginx,可以与Tomcat结合使用。但似乎比PWS这样的服务更为复杂。 –
然后,您应该使用HandlerInterceptor并在preHandle上,根据上述逻辑更改域和路径。对于您的应用程序,它将显示为正好位于正确的域和路径中。 – gspatel