MENU

Apache Struts — Java MVCの古典と2017年の重大事件

Apache Struts アイキャッチ
Apache Struts

Apache Strutsは、2000年5月にCraig McClanahan(クレイグ・マクラナハン)が公開し、後にApache Software Foundationへ寄贈されたJava製のWebアプリケーションフレームワークです。サーブレットとJSPを組み合わせるMVCモデルの先駆者として、2000年代前半のエンタープライズJava開発を席巻しました。一方で、2017年にはStruts 2の重大脆弱性が悪用されて米信用情報会社Equifaxの大規模情報漏えい事件を引き起こし、セキュリティの観点から強烈な教訓を残したフレームワークでもあります。本記事ではStrutsの歴史と現在地を整理します。

目次

この記事の目次

  1. Strutsの基本構成
  2. 2000年代のJava EE中心と凋落
  3. 現在もStrutsが残っている場所
  4. Spring MVCや他フレームワークとの対比
  5. まとめ

Strutsの基本構成

Strutsの基本構成

オリジナルのStruts 1は、リクエストを単一のActionServletで受け取り、struts-config.xmlに定義されたマッピングに沿ってActionクラスへ処理を委譲する典型的なフロントコントローラ型MVCでした。ユーザー入力はActionFormというBeanにバインドされ、検証・処理・遷移先決定がActionクラスに集中する設計です。JSPと専用のカスタムタグ(など)でビューを組み立て、業務システム的な画面を量産しやすい構造でした。

後継のStruts 2は、2006年にOpenSymphonyのWebWorkを統合する形で大幅刷新されました。ValueStack(OGNL式言語による値解決)、Interceptor(横断処理)、結果(Result)型の充実、Convention Plugin(規約による設定省略)などを導入し、Struts 1とは別物の現代的な設計に生まれ変わっています。ただしこのOGNLが、後述する2017年の脆弱性の温床にもなりました。

2000年代のJava EE中心と凋落

2000年代のJava EE中心と凋落

Strutsは2001年にApache Jakartaプロジェクトに採用されて以降、SunのJ2EE/Servletエコシステムと相性が良く、金融・保険・行政・通信業など、いわゆるエンタープライズの大規模案件で世界中に普及しました。Javaサーバーサイド開発の入門書もStrutsを題材にすることが多く、2000年代前半のJava=Strutsという時代があったほどです。

しかしSpring/Spring MVCの台頭、JSF(Java Server Faces)の登場、後にSpring Bootの勃興により、Strutsは新規採用の中心から外れていきます。2014年にはApacheがStruts 1の公式サポートを終了し、新規プロジェクトでの採用は実質的にStruts 2のみとなりました。2017年には大事件が発生します。OGNL式の処理に起因するStruts 2のリモートコード実行脆弱性(CVE-2017-5638)が悪用され、米信用情報会社Equifaxから1億4,000万件超の個人情報が流出。Strutsの名は、セキュリティ史にも深く刻まれることになりました。

現在もStrutsが残っている場所

現在もStrutsが残っている場所

新規でStrutsを採用する事例はもはや皆無に近いものの、過去に構築されたStrutsアプリは現在も大量に稼働しています。とりわけ日本の金融・保険・行政・通信業界では、Struts 1で組まれた申請系・照会系のシステムが2010年代半ばまでに作られ、数百万人規模の利用者をいまも捌いています。Struts 1は公式サポート終了済みのため、WAFを前段に置く・OS/JREのバージョンを保守する・コードレベルでの定期的な脆弱性チェックを行う、といった運用が必須です。

リプレース案件としては、Struts 1からSpring Bootへ移行する大規模なリファクタリングや、思い切ったマイクロサービス化が一般的です。ただし、画面数千・画面遷移仕様書だけで何万ページにも及ぶ業務システムの移行は重く、JBoss EAP・WebLogic等と組み合わせた延命運用のまま稼働するケースも珍しくありません。Strutsの世界は「歴史的役割を終えつつ、惰性で動き続ける巨大な裾野」を持つフレームワークと言えます。

Spring MVCや他フレームワークとの対比

Spring MVCや他フレームワークとの対比

Strutsと最も比較されるのは後継であるSpring MVCで、自動構成・DI・テスト容易性などすべての面でSpring側に分がある状態が長く続いています。JSFはコンポーネント駆動でJava EE標準ではあるものの、SPA時代との相性に難があり、新規採用は減りつつあります。Play Frameworkのようなノンブロッキングなアプローチも存在しますが、業務系のメイン候補にはなりにくいのが現状です。

Strutsを学ぶ意義は、現役の選択肢としてよりも「Java Web開発の歴史を理解する」「既存システムを引き継ぐ」点に絞られつつあります。新規開発で選ばれることはもうほとんどありませんが、レガシー保守の現場では今後10年単位でメンテ需要が残るため、Strutsの知識を持つ技術者は引き続き貴重な存在として求められ続けるでしょう。

まとめ

Apache StrutsはJava Web開発のMVCモデルを世に広めた歴史的フレームワークで、2000年代のエンタープライズ案件の中心にいました。現在は新規採用こそ少ないものの、稼働中のレガシー資産が膨大に残っており、セキュリティ運用と移行計画の両面で重要なテーマであり続けます。

※本記事はIT用語辞典の手書きドラフトです。公開前に最新情報・出典を確認のうえ加筆修正してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次