SSMフレームワークを活用したオンライン学習システムの構築

インターネット技術の成熟に伴い、情報管理の効率化と自動化が教育分野でも求められています。従来の学生の学習記録や授業スケジュールの管理は手作業が多く、ミスが発生しやすく、セキュリティも脆弱でした。本システムは、JavaとSSM(Spring + Spring MVC + MyBatis)を基盤に構築されたオンライン学習プラットフォームで、教員・学生・管理者それぞれの役割に応じた機能を提供し、教育情報の一元管理と業務効率化を実現します。

技術スタック

  • 開発言語:Java
  • フレームワーク:SSM
  • フロントエンド:JSP
  • データベース:MySQL 5.7+
  • サーバー:Tomcat 7〜10
  • ビルドツール:Maven
  • IDE:Eclipse / IntelliJ IDEA

主要機能概要

管理者モジュール

  • 教員・学生アカウント管理:登録、編集、削除、検索が可能
  • ニュース管理:学内お知らせの公開・更新・削除。公開記事はフロントページに表示
  • 掲示板監視:学生からの質問や意見を閲覧し、公式返信を投稿

教員モジュール

  • 動画教材管理:授業用動画のアップロード・更新・削除
  • 授業スケジュール管理:開講・終了時刻の設定と照会
  • 課題回収:学生提出ファイルのダウンロードと進捗確認

学生モジュール

  • 動画視聴学習:教材動画を視聴し、学習感想を投稿
  • お気に入り登録:興味のある講義をブックマーク
  • 質問掲示板:不明点を投稿し、管理者または教員からの回答を確認

コード例:認証インターセプター

package edu.security;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import com.auth.TokenValidator;
import com.model.AuthToken;

@Component
public class AuthInterceptor implements HandlerInterceptor {

    private static final String AUTH_HEADER = "Auth-Token";
    
    @Autowired
    private TokenValidator tokenValidator;

    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
        // CORS対応
        res.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
        res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE");
        res.setHeader("Access-Control-Allow-Headers", "Auth-Token,Content-Type");

        if (!(handler instanceof HandlerMethod)) return true;

        HandlerMethod method = (HandlerMethod) handler;
        if (method.getMethodAnnotation(BypassAuth.class) != null) return true;

        String tokenStr = req.getHeader(AUTH_HEADER);
        AuthToken token = tokenValidator.validate(tokenStr);

        if (token != null) {
            req.getSession().setAttribute("user_id", token.getUserId());
            req.getSession().setAttribute("user_role", token.getRole());
            return true;
        }

        res.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        res.getWriter().write("{\"error\":\"認証が必要です\"}");
        return false;
    }
}

コード例:ユーザ認証コントローラ

package edu.controller;

@RestController
@RequestMapping("/auth")
public class AuthController {

    @Autowired
    private UserService userService;

    @PostMapping("/signin")
    public ResponseEntity<Map<String, Object>> signIn(
        @RequestParam String account,
        @RequestParam String secret
    ) {
        User user = userService.findByAccount(account);
        if (user == null || !user.getSecret().equals(secret)) {
            return ResponseEntity.status(401).body(Map.of("error", "認証失敗"));
        }

        String sessionToken = TokenGenerator.create(user.getId(), user.getRole());
        return ResponseEntity.ok(Map.of("token", sessionToken));
    }

    @PostMapping("/signup")
    public ResponseEntity<String> signUp(@RequestBody User newUser) {
        if (userService.existsByAccount(newUser.getAccount())) {
            return ResponseEntity.badRequest().body("アカウント重複");
        }
        userService.register(newUser);
        return ResponseEntity.ok("登録完了");
    }

    @GetMapping("/signout")
    public ResponseEntity<String> signOut(HttpServletRequest request) {
        request.getSession().invalidate();
        return ResponseEntity.ok("ログアウト成功");
    }
}

タグ: SSM Java MyBatis SpringMVC オンライン教育

6月17日 22:11 投稿