2016-08-24 5 views
1

私は非常に大きなSpring MVC + AngularJSアプリを持っています。春のMVCはほとんどがREST APIとして動作しますが、私が開発を開始した時点では完全に(セキュリティ、ルーティング、Wro4jリソースパッキング) ではなく、Webプロジェクトではあまり経験していませんでした。Spring MVC AngularJSバックエンド付きフロントエンド

アプリはAmazon Elasticbeanstalkにデプロイされています。

フロントエンドの男が私に加わり、何とかdevプロセスを分けなければなりません。

Qeustionsは以下のとおりです。

  1. 私は2つのアプリケーションにそれらを分離するために行うている基本的な手順は何ですか?

  2. 導入プロセスとは何ですか?フロントエンド/バックエンドを個別のアプリとして展開する必要がありますか?

  3. 一般的なベストプラクティスに関するアドバイスはありますか?

答えて

-1

「MVC」は、Model View Controllerの略です。 「ビュー」はhtmlまたはjsp(サーブレットのビューの詳細を指定します)です。それらを個別に展開する必要はありません。どのようにプロジェクトを構築していますか? Mavenは良いアイデアです。フロントエンドとバックエンドのコードをすべてwar/jarファイルにラップし、それをサーバーに展開する必要があります。

あなたのAngularJSコードはあなたの春の「ビュー」に組み込まれ、そのJS部分はあなたのapp.jsに座ります。したがって、それらを別々に保つ必要はありません。あなたのフロントエンドの人はフロントエンドのコードを書くことができ、ビルドとデプロイメントを行う前に、フロントエンドのコードをプロジェクトに統合するだけで済みます。

しかし、絶対に分離する必要がある場合は、私が考えることができるオプションは1つのみです。 Tomcatのwarappファイル(「プロジェクト」)のフォルダに、すべてのUIコード(HTML、CSS、JS)を入れておきます(project-war.warとしましょう) 。デプロイされると、URLが正しくマップされていることを確認するだけです。たとえば、app.js(project/js/app.jsに存在)が/controller/actionのJavaサービスを呼び出したい場合、URLは../../../project-war/controller/actionである必要があります。

+1

は申し訳ありませんが、私の質問は分離についてでした。私は知っている、それはこの段階で分離する方が良いでしょう。さらに - 混乱。あなたの答えは質問に全く答えていません。 – user1935987

+0

真剣に、あなたはちょうど春+ AngularJSアプリを作ることを話しています。これは問題ではありません。あなたは答えを削除することができます。 – user1935987

+0

うわー、@ user1935987。助けようとするほどです。私はまだそこに答えを残します。 – javaGirl243

0

あなたは、クロスドメインの問題を抱えていることが、あなたがに

<mvc:cors> <mvc:mapping path="/**" /> </mvc:cors>

を使用することができ、春のMVCを実行するのtomcatから取得/ポストデータ、ノードまたはライト・サーバまたはApacheのフロントエンドプロジェクトを展開することができますクロスドメインの問題を解決する。

+0

も完全な答えではありません。 – user1935987

2

あなたのアプリケーションが非常に大きく、バックエンドのビルドに多くの時間(10分以上)がかかる場合や、正当な理由があるたびにすべてのアプリケーションを再構築したくない場合は、 。あなたが本当に必要なのかわからない場合は、春のMVCの下にangularJSアプリケーションを置くことは、メインページだけでも多くの利点をもたらします:春の生態系、集中型セキュリティ、ログインとアクセス制御、SSO、多くの統合を使用できます。それらを2つのアプリに分けることができます。とにかく。

1)angularJSアプリを分離したい場合は、コントローラまたはjspファイルからangularjsアプリケーションへのルーティングに関するロジックを移動する必要があります。トークンベースの認証/ログインを実装します。次に、REST_BASE_URLを一定の角度のブロックで定義し、あらゆる場所($ http、$ resource)でリクエストURLを生成することができます。基本的に角の部分で作業する場合は、リモートサーバー上でバックエンドをセットアップし、nginxやその他の小さなサーバーを使ってローカルアプリケーションのみを実行し、Google Cromeで作業します(このツールを使用してchromeを実行してください:--args --disable- web-security --user-data-dir〜/)。残念ながら、FirefoxではCSRFチェックを無効にすることはできません。

2)2つのアプリケーションを個別に構築して展開することができます。

3)また、独自のAuthenticationEntryPointを作成して、春の残りの部分で代わりにログインページの)SC_UNAUTHORIZED(401返却する必要があります。角度側は、あなたがこのようにログインページまたはダイアログを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); 
 
      } 
 
     } 
 
    }])

関連する問題