SpringBootとVue.jsを活用した観光地宿泊予約システムの実装

技術スタック

SpringBootバックエンドフレームワーク

Spring BootはTomcat/Jetty/Undertowサーバーを内蔵し、追加設定なしで利用可能です。依存関係に基づく自動設定機能により、Spring Data/Security/Cloudなどのモジュール統合が容易になります。

Vue.jsフロントエンドフレームワーク

仮想DOM技術を中核とし、データ変更時にUIを自動更新します。コンポーネント化アーキテクチャにより開発効率を向上させます。

MyBatisPlus永続化レイヤー

MyBatis拡張ライブラリで、動的SQL生成やCRUD操作を簡素化します。MySQL/Oracleなど主要DBMSをサポートし、コードジェネレータによる自動マッピングを提供します。

認証機能実装例

@PostMapping("/auth")
public Response auth(@RequestParam String id, @RequestParam String pass) {
  User user = userRepo.findByUserId(id);
  if (user == null || !user.getPassword().equals(pass)) {
    return Response.error("認証失敗");
  }
  String token = tokenService.createToken(user.getId(), user.getRole());
  return Response.ok().data("token", token);
}

@Service
public class TokenProvider {
  public String createToken(Long userId, String role) {
    Token token = tokenRepo.findByUserId(userId);
    String newToken = generateRandomToken(32);
    
    LocalDateTime expiry = LocalDateTime.now().plusHours(1);
    if (token != null) {
      token.updateToken(newToken, expiry);
    } else {
      tokenRepo.save(new Token(userId, role, newToken, expiry));
    }
    return newToken;
  }
}

セキュリティインターセプター

@Component
public class AuthInterceptor implements HandlerInterceptor {
  
  @Override
  public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
    HandlerMethod method = (HandlerMethod) handler;
    if (method.getMethodAnnotation(SkipAuth.class) != null) {
      return true;
    }
    
    String token = req.getHeader("Authorization");
    if (token == null || !tokenService.validate(token)) {
      res.setStatus(401);
      return false;
    }
    
    req.setAttribute("userId", tokenService.getUserId(token));
    return true;
  }
}

システム検証プロセス

ブラックボックステストを実施し、境界値分析を用いた機能検証を実施。認証処理では有効/無効な認証情報の組み合わせを網羅的にテスト。

検証結果概要

  • ログイン機能:異常系ケースで適切なエラー表示を確認
  • ユーザー管理:CRUD操作の整合性を検証
  • トランザクション:同時操作時の整合性保持を確認

タグ: SpringBoot vue.js MyBatisPlus JWT認証 システムテスト

6月24日 19:09 投稿