内容
Vue.js + Spring Boot + HerokuでSPAを作成しました。
Vue.jsとSpring Bootは同じリポジトリ上で管理し、ビルドも同時に実施します。
それにより、最低限のソースコード管理とHerokuへのデプロイ時にまとめてビルドする状態を実現しました。
本記事は第五弾最終回として、APIサンプルを実装し、ログイン有無によるアクセス制御が実施されているか確認します。
Vue.js + Spring Boot + Heroku(はじめに 兼 まとめ)
Vue.js + Spring Boot + Heroku(プロジェクト作成~ビルド)
Vue.js + Spring Boot + Heroku(Herokuへデプロイ〜環境毎プロパティファイル作成)
Vue.js + Spring Boot + Heroku(認証作成 Spring Boot編)
Vue.js + Spring Boot + Heroku(認証作成 Vue編)
Vue.js + Spring Boot + Heroku(サンプルAPI作成)
Spring BootにサンプルAPIを実装
Spring BootでサンプルAPIを作成します。
src/main/java/com/example/demo/配下にSampleController.javaを作成します。
SampleController.java
1 2 3 4 5 6 7 8 |
src/main/java/com/example/demo/ ├── BaseController.java ├── DemoApplication.java ├── Html5HistoryModeResourceConfig.java ├── SampleController.java ├── SecurityConfig.java ├── SpaAuthenticationFilter.java └── UserForm.java |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api") public class SampleController { @GetMapping("/sample") @ResponseBody public String getSample(){ return "リクエスト成功"; } } |
Spring Boot起動中の場合は一旦終了(■マーク)し、Spring Bootを起動(▶︎マーク)。
VueにサンプルAPIを実装
コンポーネント内でaxiosを使用できるようにするため、src/vue/src配下のmain.jsに追記。
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import Vue from 'vue' import App from './App.vue' import axios from 'axios'; import store from './store'; Vue.config.productionTip = false axios.defaults.baseURL = '/api'; // 追記 Vue.prototype.$axios = axios; // Cookieを有効にする。 axios.defaults.withCredentials = true; new Vue({ store, render: h => h(App) }).$mount('#app'); |
src/vue/src配下のApp.vueにサンプルAPIへリクエストするボタンを設置。
App.vue
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
<template> <div> <template v-if="!this.$store.getters.isAuthenticated"> <input type="text" v-model="id"> <input type="password" v-model="password"> <button @click="login">ログイン</button> </template> <template v-if="this.$store.getters.isAuthenticated"> <p>{{this.$store.getters.id}}さん</p> <button @click="logout">ログアウト</button> </template> <!-- ↓追記↓ --> <button @click="requestApi">ログインしないと失敗するリクエスト</button> <p>{{result}}</p> <!-- ↑追記↑ --> </div> </template> <script> export default { data() { return { id: '', password: '', // ↓追記↓ result: '', // ↑追記↑ }; }, methods: { login() { this.$store.dispatch('login', { id: this.id, password: this.password }); this.id = ''; this.password = ''; }, logout() { this.$store.dispatch('logout'); }, // ↓追記↓ requestApi() { this.$axios .get('/sample') .then(response => { this.result = response.data; }) .catch(error => { this.result = error; }) } // ↑追記↑ } }; </script> |
(vue-CLIでの確認は省略します。)
Spring Bootでホストした挙動を確認するため、IntelliJ右側のMavenタブを開き、maven installを実行してVueをビルド。
【追記】windows環境の場合、npmコマンドの–prefixオプションが意図した動作をしません。手動でのビルドが必要です。
1 2 3 |
cd src/vue npm install npm build |
Spring Boot起動中の場合は一旦終了(■マーク)し、Spring Bootを起動(▶︎マーク)。http://localhost:8080/
へアクセスし、トップページを確認。
※Springで環境変数毎に異なるDBを設定する。のデータであれば「user1, password」「user2, password」でログインできます。
Herokuにデプロイ
Herokuにデプロイして挙動を確認します。
1 2 3 4 5 6 |
$ heroku login # Enterキーをクリックしてログイン。 $ cd demo/ # プロジェクトのあるディレクトリ $ git add . $ git commit -m 'ログインログアウトサンプルを実装' $ git push heroku master |
Herokuコンソール情のOpen Appまたは、https://[アプリ名].herokuapp.com/
へアクセスし、動作を確認。
これにて完了です。おつかれさまでした。