技術スタック
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操作の整合性を検証
- トランザクション:同時操作時の整合性保持を確認