プロジェクト情報
ファイル構造
com.cok
├── common // ツール類
│ └── annotation // 定義可能の注釈
│ └── config // コンフィグ
│ └── constant // コンスタント変数
│ └── core // コアコントローラー
│ └── enums // 列挙型定義
│ └── exception // 異常処理
│ └── json // JSONデータ処理
│ └── utils // ツール類
│ └── xss // XSS処理
├── framework // フレームワーク
│ └── aspectj // 注釈実現クラス
│ └── config // システムコンフィグ
│ └── datasource // データ権限
│ └── interceptor // インターセプター
│ └── manager // 非同期処理
│ └── shiro // 権限制御
│ └── web // フロント制御
├── cok-generator // コード生成(使用しない場合、除去可)
├── cok-quartz // タスクジョブ(使用しない場合、除去可)
├── cok-system // システムコード
├── cok-admin // 管理用モジュール
├── cok-xxxxxx // 他のモジュール
コンフィグファイル
- 一般的な設定
application.yml
# コンフィグファイル
cok:
# 名称
name: COK
# バージョン
version: 1.2.0
# バージョン年
copyrightYear: 2023
# データ使用するか
demoEnabled: true
# ファイルパス、例( Windowsの場合D:/cok/uploadPath,Linuxの場合 /home/cok/uploadPath)
profile: D:/cok/uploadPath
# IPアドレスを取得するか
addressEnabled: false
# 開発環境用のコンフィグ
server:
# サーバHTTPポート,デフォルトは80
port: 80
servlet:
# アプリケーションのアクセスパス
context-path: /
tomcat:
# tomcatのURIエンコーディング
uri-encoding: UTF-8
# tomcatの最大スレッド数,デフォルトは200
max-threads: 800
# Tomcat初期化のスレッド数,デフォルトは25
min-spare-threads: 30
# ログ設定
logging:
level:
com.ruoyi: debug
org.springframework: warn
# ユーザ設定
user:
password:
# パスワード入力を間違えた際に、{maxRetryCount}回で、アカウントロック10分間
maxRetryCount: 5
# Spring設定
spring:
# テンプレートエンジン
thymeleaf:
mode: HTML
encoding: utf-8
# キャッシュ使用するか
cache: false
# リソース情報
messages:
# 多言語対応のフィアルパス
basename: static/i18n/messages
jackson:
time-zone: GMT+8
date-format: yyyy-MM-dd HH:mm:ss
profiles:
active: druid
# ファイルアップロード
servlet:
multipart:
# シングルファイルのサイズ
max-file-size: 10MB
# トータルアップロードファイルサイズ
max-request-size: 20MB
# サービスモジュール
devtools:
restart:
# ホットデプロイスイッチ
enabled: true
# MyBatis
mybatis:
# 検索対象のパッケージエイリアス
typeAliasesPackage: com.ruoyi.**.domain
# mapperのスキャン設定、すべてのmapper.xmlマッピングファイルを探す
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 全体の設定ファイルをロードする
configLocation: classpath:mybatis/mybatis-config.xml
# PageHelperページングプラグイン
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
# Shiro
shiro:
user:
# ログインURL
loginUrl: /login
# 権限認証失敗URL
unauthorizedUrl: /unauth
# トップページURL
indexUrl: /index
# 認証コードスイッチ
captchaEnabled: true
# 認証コードタイプ math 数値計算 char 文字
captchaType: math
cookie:
# Cookieのドメインをセットする デフォルト空、つまり現在のアクセスドメイン
domain:
# cookieの有効アクセスパスをセットする
path: /
# HttpOnly属性をセット する
httpOnly: true
# Cookieの有効期間をセットする、日単位
maxAge: 30
# 暗号鍵をセットする、必ず一意性を確保する(生成方法、直接コピーしてmainを実行) KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecretKey deskey = keygen.generateKey(); System.out.println(Base64.encodeToString(deskey.getEncoded()));
cipherKey: zSyK5Kp6PZAAjlT+eeNMlg==
session:
# セッションタイムアウト時間、-1は永遠にタイムアウトしない(デフォルト30分)
expireTime: 30
# セッションをデータベースに同期する周期(デフォルト1分)
dbSyncPeriod: 1
# セッションの有効性を確認する間隔、デフォルトは10分
validationInterval: 10
# 同一ユーザーの最大セッション数、例えば2の意 味は同一アカウントで最大2人同時ログイン可能(デフォルト-1制限なし)
maxSession: -1
# 前回/次回ログインしたユーザーを強制ログアウトする、デフォルトは前回ログインしたユーザーを強制ログアウトする
kickoutAfter: false
# XSS攻撃防止
xss:
# フィルタースイッチ
enabled: true
# 除外リンク(複数はカンマ区切り)
excludes: /system/notice/*
# マッチングリンク
urlPatterns: /system/*,/monitor/*,/tool/*
# Swaggerの設定
swagger:
# Swaggerを有効にするか
enabled: true
- データソースの設定
application-druid.yml
# データソース設定
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# マスターデータソース
master:
url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: password
# スレーブデータソース
slave:
# スレーブデータソース切り替え/デフォルトはオフ
enabled: false
url:
username:
password:
# 初期コネクション数
initialSize: 5
# 最小コネクションプール数
minIdle: 10
# 最大コネクションプール数
maxActive: 20
# コネクション取得待ち時間のタイムアウト設定
maxWait: 60000
# 空きコネクションの検出間隔をミリ秒単位で設定
timeBetweenEvictionRunsMillis: 60000
# プールに入ったコネクションの最小生存時間をミリ秒単位で設定
minEvictableIdleTimeMillis: 300000
# プールに入ったコネクションの最大生存時間をミリ秒単位で設定
maxEvictableIdleTimeMillis: 900000
# コネクションが有効かどうかを検証するクエリ
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# ホワイトリストを設定、何も設定しない場合はすべてのアクセスが許可される
allow:
url-pattern: /druid/*
# コンソール管理ユーザー名とパスワード
login-username:
login-password:
filter:
stat:
enabled: true
# 遅いSQLログ記録
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
- コード生成の設定
generator.yml
# コード生成
gen:
# 作者
author: ruoyi
# デフォルトの生成パッケージパス system モジュール名を変更する必要がある場合 例: system monitor tool
packageName: com.ruoyi.system
# テーブル接頭辞を自動的に削除するか、デフォルトはfalse
autoRemovePre: false
# テーブル接頭辞(生成されるクラス名にはテーブル接頭辞は含まれない、複数の場合はカンマ区切り)
tablePrefix: sys_
コア技術
SpringBootフレームワーク
1、紹介
Spring Boot
は使い始めから簡単なフレームワークであり、さまざまなデフォルトの設定を提供することでプロジェクトの設定を簡素化します。これにより、私たちのSpring
アプリケーションはより軽量で、より迅速に始めることができます。 メインプログラムのmain
を実行するだけでアプリケーションを実行できます。また、アプリケーションをjar
ファイルにパッケージ化し、java -jar
コマンドを使用してWebアプリケーションを実行することもできます。Spring Boot
は、「設定よりも規約」の原則に従っており、少ない設定だけで使用することができます。ほとんどの場合、デフォルトの設定をそのまま使用できます。また、Spring Cloud
のマイクロサービスともシームレスに統合できます。
提示
Spring Boot2.x
は、jdk8
以上のバージョンとTomcat 8
以上のバージョンが必要です。
2、メリット
- エンコーディングを簡単にする:注釈の使用を推奨する
- 設定を簡単にする:自動設定、新しい技術を迅速に統合能力、冗長なコード生成やXMLの設定は必要ない
- デプロイメントを簡単にする:Tomcat、Jetty、UndertowなどのWebコンテナを組み込み、WAR形式でのデプロイメントは不要
- モニタリングを簡単にする:実行時のアプリケーション監視を提供
- 統合を簡単にする:主要な開発フレームワークとの無配置統合
- 開発を簡単にする:プロジェクトの構築とデプロイの効率を大幅に向上させる
Shiroセキュリティ制御
1、紹介
Apache Shiroは、Javaのセキュリティフレームワークです。Shiroは認証、認可、暗号化、セッション管理、Webとの統合、キャッシュなどをサポートしています。ShiroはJavaSE環境だけでなく、JavaEE環境でも使用することができます。
2、メリット
- 理解しやすいJavaセキュリティAPI
- 簡単な身元確認、複数のデータソースのサポート
- シンプルなロールの認可、粒度の細かい承認のサポート
- 他のフレームワークやコンテナに依存せず、独立して実行可能
3、特性
Authentication
身分認証/ログインは、ユーザーが対応する身分を持っているかを検証します。
Authorization
認可は、認証済みのユーザーが特定の権限を持っているかを検証します。つまり、ユーザーが特定の操作を行うことができるかどうかを判断します。
SessionManagement
セッション管理は、ユーザーのログイン後はセッションが開始され、ログアウトするまでの間、そのセッションに関連する情報が保持されます。
Cryptography
暗号化は、データの安全性を保護します。たとえば、パスワードを平文ではなく暗号化してデータベースに保存します。
Caching
キャッシュは、ユーザーのログイン情報や所持するロール/権限などを毎回取得する必要がなくなり 、効率が向上します。
Concurrency
Shiroは、マルチスレッドアプリケーションの並行認証をサポートします。つまり、1つのスレッド内で別のスレッドを開始すると、権限が自動的に伝播されます。
Testing
テストサポートを提供します。
RunAs
別のユーザーとしてアクセスすることを許可されます(許可される場合)。
RememberMe
「ログイン状態を保持する」機能。一度ログインした後、次回以降は再度ログインする必要がありません。
4、アーキテクチャ
Subject
:現在のユーザーを表します。具体的な人ではなく、ネットワーククローラーやロボットなど、現在のアプリケーションとやり取っているものすべてがSubjectです。SubjectはすべてSecurityManagerにバインドされ、Subjectとのすべての対話はSecurityManagerに委譲されます。Subjectはファサードのようなものと考えることができます。実際の実行者はSecurityManagerです。
SecurityManager
:セキュリティに関連するすべての操作はSecurityManagerとやり取りします。また、すべてのSubjectを管理します。これがShiroの中核であり、後述する他のコンポーネントとのやり取りを担当します。
Realm
:Realm ShiroはRealmからセキュリティデータ(ユーザー、ロール、権限など)を取得します。つまり、SecurityManagerがユーザーの身分を検証するために、Realmから対応するユーザーを取得して比較します。また、操作の検証のためにユーザーのロール/権限をRealmから取得する必要があります。Realmは1つ以上存在することができます。通常、アプリケーションでは独自のRealmを実装する必要があります。
SessionManager
: Servletを書い たことがある場合は、Sessionの概念を知っているはずです。Sessionのライフサイクルを管理するコンポーネントはSessionManagerです。
SessionDAO
:セッションデータのCRUDを行うため、DAO(データアクセスオブジェクト)が使っています。たとえば、Sessionをデータベースに保存したい場合は、独自のSessionDAOを実装するか、キャッシュに書き込むことで性能を向上させることができます。
CacheManager
:ユーザーやロール、権限などのキャッシュを管理します。これらのデータはほとんど変更されないため、キャッシュに保存することでアクセスの性能を向上させることができます。
コードはSubjectを介して認証および認可を行い、SubjectはSecurityManagerに委任されます。SecurityManagerにはRealmが注入される必要があります。これにより、SecurityManagerは有効なユーザー及びその権限を取得して判断することができます。Shiroはユーザー/権限の管理を提供せず、開発者が自分でRealmを注入することを通じて実現します。
Shiroはユーザー/権限の管理を提供しないため、開発者が独自に設計/提供し、該当するインターフェースでShiroに注入します。
Thymeleafテンプレート
1、紹介
Thymeleafは、Web及び孤立のJava環境で使用されるテンプレートエンジンであり、HTML、XML、JavaScript、CSS、純テキストなどを処理することができます。Spring MVCなどのWebフレームワークと統合してWebアプリケーションのテン プレートエンジンとして使用することができます。他のテンプレートエンジン(例:FreeMarker)と比較して、Thymeleafの最大の特徴は、Webアプリケーション全体を起動する必要がなくなり、テンプレートページをブラウザで直接開いて正しく表示することができる点です(フロントエンドとバックエンドを分離するのに便利です)。JSPを捨ててThymeleafを使いましょう。完全に再構築されたThymeleaf 3.0は、メモリ使用量を大幅に減らし、性能と並行性を向上させ、大量の出力フラグの集合によるv 2.1版でのリソース占有を回避しました。Thymeleaf 3.0は、大部分のDOMベースの処理を捨てて、イベントベースのテンプレート処理エンジンとなりました。それはテンプレートタグやテキストを処理し、直ちに出力を生成し、新しいイベントの前にテンプレートパーサー/キャッシュイベントに応答します。Thymeleafは、Spring Boot公式で推奨されるテンプレートエンジンです。
2、メリット
- 多言語対応サポートは簡単に
- 構文は簡単で、多くの一般的な機能が組み込まれて強力な機能を備えている。
- Springとの統合も良好
- 静的なHTMLにタグ属性を埋め込むことができ、ブラウザでテンプレートファイルを直接開くことができるため、フロントエンドとバックエンドの連携が便利
- Spring Bootの公式で推奨されており、よく使われている