我有一个相当大的Spring + AngularJS应用程序。Spring主要作为REST工作,但在我开始开发时(安全性、一些路由、Wro4j资源打包)并没有在Web项目中有太多的经验。
App部署在AmazonElasticbean秸秆上。
前端的家伙和我在一起,我们必须分离开发过程。
的问题是:
发布于 2016-08-30 13:32:13
我认为,如果您的应用程序非常大,并且后端构建需要大量时间( angularJS mins),或者您不希望每次都基于任何好的理由重新构建所有应用程序,那么分离angularJS应用程序和单独部署的唯一原因就是。将angularJS应用置于spring下,即使只是主页,也给您带来了许多优势:可以使用spring生态系统、集中式安全、登录和访问控制、SSO、大量集成、spring社交等。不确定你真的需要把它们分成两个应用程序。但不管怎样。
1)如果您想分离angularJS应用程序,您需要将任何有关路由的逻辑从控制器或jsp文件转移到angularjs应用程序。实现令牌基auth/登录。然后,您可以在角的常量块中定义REST_BASE_URL常数,并使用everywhere($http,$resource)生成请求url。如果您基本上在角部分上工作,您可以在远程服务器上安装后端,并且只能使用nginx或任何小型服务器在本地运行角应用程序,并在Google上运行(请确保您使用此工具运行chrome:--args -禁用-web-安全-用户-数据-dir ~/)。不幸的是,您不能禁用Firefox中的CSRF检查。
2)您可以分别构建和部署两个应用程序,这将是一个不错的选择。
3)您还需要创建自己的AuthenticationEntryPoint并返回SC_UNAUTHORIZED(401),而不是spring中的登录页面。如果角度方面,您可以添加全局拦截器捕获401,并显示登录页面或对话框如下:
.factory('authHttpResponseInterceptor',['$q','$location',function($q,$location){
return {
response: function(response){
if (response.status === 401) {
console.log("Response 401");
}
return response || $q.when(response);
},
responseError: function(rejection) {
if (rejection.status === 401) {
window.location.reload();
}
return $q.reject(rejection);
}
}
}])
发布于 2016-08-25 13:00:59
您可以在节点、lite服务器或apache上部署前端项目,从运行Spring的tomcat获取/发布数据,您可能存在跨域问题,可以使用
<mvc:cors> <mvc:mapping path="/**" /> </mvc:cors>
来解决跨域问题。
发布于 2016-08-24 16:00:09
" MVC“是Spring,代表。" view“可以是html或jsp (您可以在servlet中指定视图细节)。您不需要单独部署它们。你是如何建立你的项目的?Maven是个好主意。它将将所有前端和后端代码打包到war/jar文件中,然后jus必须将其部署到服务器上。
您的AngularJS代码将包含在春季的“视图”中,其JS部分将位于您的app.js中。所以没有必要把它们分开。您的前端人员可以编写前端代码,在构建和部署之前,您只需将其集成到项目中即可。
但是,如果你一定要把它们分开,我只能想到一个选择。将您的所有UI代码(HTML、CSS、JS)与war文件一起放在Tomcat中的"webapp“文件夹中(让我们将其称为”project“)(让我们将其命名为war文件)。部署时,您只需确保您的URL映射正确。例如,如果app.js(驻留在项目/js/app.js中)想要为/controller/action调用/controller/action服务,则该URL必须是../../../project-war/controller/action。
https://stackoverflow.com/questions/39121156
复制相似问题