Skip to content

vjsp-boot-form高速開発フレームワーク

プロジェクト概要

vjsp-boot-formは、Spring Bootに基づくバックエンドサービスプロジェクトで、フォーム処理、ワークフロー管理、システム管理などの機能を提供します。このプロジェクトは現代的なJava技術スタックを採用し、複数のデータベースをサポートし、完善されたセキュリティメカニズムとログ記録機能を提供します。

組み込みモジュール

  1. ユーザー管理:システム操作者を管理し、ユーザーアカウントの作成、権限割り当て、情報メンテナンスを完了します。

  2. 部門管理:会社、部門の多階層組織構造を設定し、ツリー構造で直感的に表示し、データ権限に基づいて分離をサポートします。

  3. メニュー管理:システムナビゲーションメニュー、操作機能権限、ボタンレベルの権限識別子を設定し、きめ細かいアクセス制御を実現します。

  4. ロール管理:異なるロールにメニューと操作権限を割り当て、組織構造に基づいてデータ権限範囲を分割することをサポートします。

  5. 辞書管理:システムで一般的に使用され、比較的固定された分類、タグなどの基本データを維持し、データの一貫性と保守性を向上させます。

  6. システムログ:システムの正常な操作ログと異常情報ログを記録および検索し、監査と障害調査を容易にします。

開発説明

実行環境

ツールバージョン
Java8
Maven3.6.3 +
Redis5 +
PostgreSQL12.16
IDEIDEA、Eclipse 、VS Code等

プロジェクト構造

vjsp-boot-form
├── src
│   ├── main
│   │   ├── java
│   │   │   └── net
│   │   │       └── vjsp
│   │   │           ├── VjspApplication.java        # アプリケーション起動エントリクラス
│   │   │           ├── common                      # 共通ツールとコンポーネント
│   │   │           ├── framework                   # フレームワーク核心コンポーネント
│   │   │           ├── log                         # ログ関連機能
│   │   │           ├── modules                     # 業務モジュール
│   │   │           ├── starter                     # ファイルアップロード・ダウンロード設定モジュール
│   │   │           ├── system                      # システム管理モジュール
│   │   │           └── workflowprocess             # ワークフロー処理モジュール
│   │   └── resources
│   │       ├── application.yml                     # アプリケーション主設定ファイル
│   │       ├── application-dev.yml                 # 開発環境設定
│   │       ├── template                            # ページテンプレートファイル
│   │       ├── mapper                              # MyBatisマッピングファイル
│   │       ├── static                              # 静的リソース
│   │       │   └── vjsphtml                        # フロントエンドページ
│   │       └── vjsp-mapping                        # VJSPマッピング設定
│   └── test
│       └── java                                    # テストコード
└── pom.xml                                         # Mavenプロジェクト設定ファイル
└── sql                                         # データベーススクリプト

構造規範

一階パッケージパス説明
common共通ファイルパッケージ、グローバル変数、例外クラス、列挙クラス、静的ツールクラスなど、業務に関係ないグローバルファイル
frameworkシステムファイルパッケージ、権限フレームワーク、設定ファイル、インターセプター、依存注入ツールクラス
systemシステムモジュール、ユーザー、ロール、メニュー、ログ、ログインなど
modules業務モジュール、システム組み込みモジュール以外の他の機能モジュール
workflowprocessワークフローモジュール
resources設定ファイル

Maven規範

springbootのメインバージョンが提供する依存jarパッケージを使用する場合、バージョン番号を記述する必要はありません。springbootのメインバージョンが提供しない依存jarパッケージの場合、バージョン番号の宣言をプロパティファイルに抽出します。

現在のシステムで使用されている、springbootのメインバージョンが提供しない依存jarパッケージは以下の通りです:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <skipTests>true</skipTests>
    <druid.version>1.1.10</druid.version>
    <hutool.version>4.5.7</hutool.version>
    <jjwt.version>0.9.0</jjwt.version>
    <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
    <mybatis-plus.version>3.3.2</mybatis-plus.version>
    <fileupload.version>1.5</fileupload.version>
    <poi.version>3.9</poi.version>
    <zip4j.version>1.3.2</zip4j.version>
    <beanutils.version>1.9.4</beanutils.version>
    <collections4.version>4.4</collections4.version>
    <bcprov.version>1.73</bcprov.version>
    <mail.version>1.6.2</mail.version>
    <xmlbeans.version>3.1.0</xmlbeans.version>
    <jsqlparser.version>1.4</jsqlparser.version>
    <jexl3.version>3.0</jexl3.version>
    <vjsp-form.version>3.0-RELEASE</vjsp-form.version>
    <fastdfs.version>1.27.2</fastdfs.version>
    <s3.version>1.11.792</s3.version>
    <mapstruct.version>1.5.1.Final</mapstruct.version>
</properties>

JARパッケージリスト

名称バージョン用途
javax.servlet-api明示的に指定されていない、コンテナが提供Servlet API(provided)
spring-boot2.7.18フレームワークメインバージョン
spring-boot-starter-webメインフレームワークバージョンと同じWebコンテナ
spring-boot-starter-testメインフレームワークバージョンと同じテスト
spring-boot-configuration-processorメインフレームワークバージョンと同じメタデータ補完
spring-boot-starter-aopメインフレームワークバージョンと同じインターセプター
spring-boot-devtoolsメインフレームワークバージョンと同じホットコンパイルツール
spring-boot-starter-securityメインフレームワークバージョンと同じセキュリティ認証
spring-boot-starter-data-redisメインフレームワークバージョンと同じデータキャッシュ
spring-boot-starter-validationメインフレームワークバージョンと同じ検証フレームワーク
lombokSpring Boot によって管理され、デフォルトで互換性あり開発ツールライブラリ
mybatis-plus-boot-starter3.3.2永続層フレームワーク
mybatis-plus-generator3.3.2永続層コード生成
postgresqlSpring Boot によって管理データベースドライバ(PostgreSQL)
bcprov-jdk15to181.73暗号化ライブラリ
jjwt0.9.0JWTサポート
mapstruct1.5.1.Finalコード生成ツール
mapstruct-processor1.5.1.Finalコード生成ツール(アノテーションプロセッサ)
poi3.9Excel ツール(poi-ooxml、poi-scratchpadを含む)
commons-beanutils1.9.4共通ツールクラス
commons-collections44.4共通ツールクラス
poi-ooxml4.1.2excelツール
commons-io2.19.0共通ツールクラス
commons-lang33.12.0共通ツールクラス
fastdfs-client1.27.2ファイルストレージ
aws-java-sdk-s31.11.792ファイルストレージ

命名規範

すべてのオブジェクトクラス名は大文字キャメルケース(PascalCase)を使用し、アンダースコア、小文字キャメルケース、略語などの非標準命名は使用できません。

オブジェクト使用場面命名規範
Entityワークフローエンティティオブジェクト接尾辞としてEntityを使用
Controllerコントローラコンポーネント、HTTPリクエストの受信と処理、対応する業務ロジックへのリクエストの分配接尾辞としてControllerを使用
Service業務ロジックインターフェース接尾辞としてServiceを使用
ServiceImpl業務ロジック実装クラス、Mapperを呼び出し、トランザクションを処理接尾辞としてServiceImplを使用
Mapper永続層、データベース操作メソッドを定義接尾辞としてMapperを使用
Configシステム設定クラスオブジェクト接尾辞としてConfigを使用
Filterフィルターオブジェクト接尾辞としてFilterを使用
Aspectロジックアスペクト実装オブジェクト接尾辞としてAspectを使用
Propertiesプロパティ設定ファイル接尾辞としてPropertiesを使用
ConvertPO ↔ DTO ↔ VO 間の変換を担当 (MapStruct実現)接尾辞としてConvertを使用
Constants定数オブジェクト接尾辞としてConstantsを使用
Viewサービス間呼び出し、複雑なロジックカプセル化、または階層を跨るデータ伝送に使用接尾辞としてViewを使用

リクエストヘッダー形式

認証はJWTを使用して実装されます。ユーザー照会を例に、渡し形式:

POST http://127.0.0.1/system/users/listAll
Content-Type: application/json
Authorization: Bearer_<jwt_token>

{
  "loginName": "zhangsan"
}

コード規範

制御層

  1. マッピングルール グローバル、各メソッド
  2. 監査ログ
  3. フォーム検証
  4. 戻りオブジェクト形式
  5. 権限制御
  6. ドキュメントアノテーション
  7. メソッド定義
  8. 例外処理
  9. アクセスレート制限
  10. エラーコード

業務層

  1. 継承関係
  2. IServiceメソッドリスト
  3. グローバル共通serviceの追加
  4. 業務serviceの追加
  5. トランザクション制御
  6. ページング
  7. 例外処理
  8. キャッシュアノテーション

永続層

  1. 継承関係
  2. BaseMapperメソッドリスト
  3. グローバル共通Mapperの追加
  4. 業務Mapperの追加
  5. MappperでのカスタムSQL使用
  6. XMLでのカスタムSQL使用
  7. べき等的新規追加と保存

権限規範

  1. 三つの使用場面
    1. ログインし、権限付与が必要
    2. ログインが必要だが、権限付与は不要
    3. ログイン不要(リンク:ホワイトリストの使用説明)
  2. アノテーション形式
  3. リソース識別子の維持とテーブル対応関係
  4. 権限インターセプトメソッドの注入
  5. 権限インターセプトの関数

開発規範

  1. ユーザー個人に属するページまたは機能は、必ず権限制御検証を実施しなければならない
  2. ユーザーの機密データは直接表示を禁止し、表示データに対して非可逆なマスキング処理を施さなければならない
  3. ユーザーリクエストで渡されるパラメータは、すべて有効性検証と長さ検証を実施しなければならない
  4. 設定ファイル中のパスワードは暗号化が必要
  5. アップロードファイルにはサイズ制限とヘッダ特徴コード検証を定義する

データベース規範

テーブル作成規範

  1. テーブル名、フィールド名は小文字の英字または数字を使用し、数字で始まることは禁止

  2. テーブル名は複数形の名詞を使用できない

  3. 業務テーブルはデフォルトフィールドを含まなければならない

    フィールド名データ型必須かどうかデフォルト値説明
    idvarchar(40)はい主キー
    create_user_idint8はい作成者ID
    create_timetimestamp(6)はいnow()作成時間
    update_user_idint8いいえ更新者ID
    update_timetimestamp(6)いいえ更新時間
    is_deleteint2はい0削除フラグ(0正常 1削除)
  4. データベースでは物理削除操作を使用できず、論理削除を使用する。

  5. 業務ユニークフィールドは必ずインデックスを作成する

システム設定クラス

XSSフィルター設定(XSSFilterConfig.java)

  1. XSS フィルターを登録

    ## XSS攻撃防止
    xss:
       # フィルタースイッチ
       enabled: true
       # 除外リンク(複数はカンマ区切り)
       excludes: /wechat/callback
       # マッチリンク
       urlPatterns: /*

クロスオリジン設定(GlobalCorsConfig.java)

  1. 使用場面
  2. 指定ドメインのクロスオリジン設定

MyBatis設定(MyBatisConfig.java)

  1. スキャンパス設定
  2. プラグイン登録

Redis設定(RedisConfig.java)

  1. RedisTemplateのシリアライズ方式を設定

    keyにはStringシリアライズ、valueにはJSONシリアライズを使用。具体的な使用方法は。。。Redisツールクラスを参照

セキュリティ設定(SecurityConfig.java)

セキュリティフィルターチェーンを設定 URLアクセス権限、クロスオリジン、CSRF、セッション管理などのセキュリティポリシーを設定

依存注入ツールクラス

Redis操作クラス

  1. 使用場面
  2. メソッドリスト+コード例

パスワードツールクラス

  1. 注入位置、どのような暗号化方式があるか
  2. メソッドリスト+コード例

静的メソッドツールクラス

Base64ツール(Base64.java)

クロスプラットフォームコマンド実行ツール(CmdUtil.java)

日付ツール(DateUtils.java)

メールツール(EmailUtils.java)

Excelツール(ExcelUtil.java)

ネットワークツール(HttpKeyUtil.java)

Httpリクエストツール(HttpUtil.java)

IPツール(IpUtils.java)

JWTツール(JwtTokenUtil.java)

ログキャッシュ(LogsPool.java)

MD5ツール(MD5Util.java)

RSAツール(RsaUtils.java)

Servletツール(ServletUtils.java)

Springツール(SpringUtil.java)

SSLツール(SSLClient.java)

文字列ツール(StringUtils.java)

3Des暗号化・復号ツール(TripleDes.java)

ファイルツール(VjspFiles.java)

ZIPツール(Zips.java)

実行

データベーススクリプトの初期化、設定ファイルの修正

  1. 新しいデータベースを作成
  2. sql/vjsp_form.sql ファイルをインポート
  3. application-dev.yml ファイルのデータベース接続情報を修正
  4. application-dev.yml ファイルのRedis接続情報を修正
  5. フロー設定の修正

src\main\resources\application-dev.yml を開く

yml
vjsp:
  run:
    # フローリクエストインターフェース秘密鍵、ts_flow_partner テーブルの partnerpass フィールドに対応
    partnerpass: TaXxYGBj1idmf4oCVUOK75QqWsZD2cEy
    # フローインターフェースurl
    vjspFlowUrl: http://127.0.0.1:9090/
    # vjsp-mapping フォルダパス
    resourcesBaseConfig:
  # ログを有効にするかどうか
  audit-log:
    # true 有効 false 無効
    enabled: true
    # logger ログフレームワークを使用して出力
    # db データベースに保存
    log-type: db
  # rsa パスワード暗号化
  # RsaUtils.java のmainメソッドを使用して新しいkeyを生成

アプリケーション起動

プロジェクトのメイン起動クラスは net.vjsp.VjspApplication で、標準的なSpring Bootの起動方法を使用:

java
@ServletComponentScan
@SpringBootApplication
public class VjspApplication {
    public static void main(String[] args) {
        SpringApplication.run(VjspApplication.class, args);
    }
}

アプリケーションワークフロー

アプリケーションパス

expansion-pack/vjsp_workflow

設定ファイル

expansion-pack\vjsp_workflow\config\application.yml

properties
# データベースアドレス
db.url=jdbc:postgresql://xxx.xxx.xxx.xxx:5432/vjsp_form
# データベースドライバ
db.driverClassName=org.postgresql.Driver
# データベースユーザー名
db.username=postgres
# データベースパスワード
db.password=

起動

run.bat または run.sh を実行してアプリケーションを起動

ブラウザを開き、以下を入力:http://localhost:8080/index.html

デフォルトアカウント/パスワード: admin / 888

VS Code設定

文字化け問題

ファイル - 基本設定 - 設定 Auto Guess Encoding にチェックを入れる

デプロイ

パッケージング説明

pom.xml にはjarパッケージングプラグインが設定されており、jarにパッケージングしたくないファイルやディレクトリを除外できます。例:

xml
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
      <excludes>
         <!-- 例:特定の設定ファイルを除外 -->
         <exclude>**/application.yml</exclude>
         <exclude>**/application-dev.yml</exclude>
         <!-- 例:ディレクトリ全体を除外 -->
         <exclude>**/static/**</exclude>
         <exclude>**/vjsp-mapping/**</exclude>
      </excludes>
 </configuration>
</plugin>

独立jarデプロイ方式

  • application-dev.yml のデータベース接続情報、Redis接続情報、フロー設定などを本番環境情報に修正。
  • pom.xmlの以下の部分を削除し、mvn installでパッケージングすると、jarパッケージには設定ファイル、静的リソースファイル、フォームロジックファイルが含まれます。
xml
<!-- 例:特定の設定ファイルを除外 -->
<exclude>**/application.yml</exclude>
<exclude>**/application-dev.yml</exclude>
<!-- 例:ディレクトリ全体を除外 -->
<exclude>**/static/**</exclude>
<exclude>**/vjsp-mapping/**</exclude>

パッケージング後のjarパッケージは直接実行できます。例:

java -jar vjsp-boot-form-1.0.2.jar

静的ページ独立デプロイ + バックエンドjarパッケージ

application-dev.yml の以下の部分を削除し、jarパッケージが静的ファイルをロードしないようにします。

yml
  web:
    resources:
      # フロントエンドページ、リソースファイル パス
      static-locations: classpath:static/vjsphtml/,file:./static/vjsphtml/,
  • application-dev.yml のデータベース接続情報、Redis接続情報、フロー設定などを本番環境情報に修正。
  • pom.xmlの以下の部分を削除し、mvn installでパッケージングすると、jarパッケージには設定ファイル、フォームロジックファイルが含まれます。
xml
<!-- 例:特定の設定ファイルを除外 -->
<exclude>**/application.yml</exclude>
<exclude>**/application-dev.yml</exclude>
<!-- 例:ディレクトリ全体を除外 -->
<exclude>**/vjsp-mapping/**</exclude>

以下をのみ保持
<exclude>**/static/**</exclude>

nginx を使用して静的ページと jarパッケージのアクセスアドレスをプロキシします。

ページリクエストのインターフェースアドレスを修正

static/vjsphtml/_vjsp_setting/setting.js のインターフェースアドレスを修正

js

var _vjsp_inter_domain = getRootPath() + (_vjsp_is_path != 0 ? getContextPath() : '');

以下のように修正

var _vjsp_inter_domain = 'あなた自身のアドレス';

パッケージング後のjarパッケージは直接実行できます。例:

java -jar vjsp-boot-form-1.0.2.jar

設定ファイル、静的リソース、フォームロジックファイル、jar パッケージを分離デプロイ

pom.xml の jarパッケージングプラグインの設定を保持し、mvn install でパッケージング後、jarパッケージには静的ファイル、フォームロジックファイル、設定ファイルが含まれません。

デプロイディレクトリ構造は以下の通り:

yml

├── config
│   ├── application-dev.yml
│   └── application.yml
├── static
│   └── vjsphtml
├── vjsp-boot-form-1.0.2.jar
└── vjsp-mapping

注意事項

  • static/vjsphtml を nginx がプロキシする場合、application-dev.yml の静的リソースパスと setting.js のインターフェースアドレスを削除する必要があります。

  • vjsp-mapping が jarパッケージと同じ階層ディレクトリにない場合、application-dev.yml のフォームロジックファイルパスを修正する必要があります。

yml
    # vjsp-mapping フォルダパス
    # vjsp-mappingのフルパスに修正(vjsp-mapping 自体は含まない)
    resourcesBaseConfig: /opt/app/