1.pomファイルとAOPを頼る史郎を追加
<! -史朗- >
<依存>
<groupIdを> org.apache.shiro </ groupIdを>
<たartifactId>史郎スプリング</たartifactId>
<バージョン> 1.4.0 </バージョン>
</依存関係>
<依存>
<のgroupId> org.springframework.boot </のgroupId>
<たartifactId>ばねブートスタータAOP </たartifactId>
</依存>
2.ディレクトリ階層
店舗エンティティBeanクラス
構成ストアの設定クラス
コントローラ記憶制御クラス
DAO格納されたデータ・インターフェース
サービスストレージ・ビジネスクラス
ツールを格納するためのパブリック・メソッド
3.エンティティクラスの確立
メインのエンティティクラスのユーザー、ロールと権限カテゴリーであります
3.1ユーザクラス
getおよびsetメソッドが省略されています
必要な属性をいくつかのフィールドは、状況下で行うことができますが、ID、ユーザ名、パスワード、塩が必要なフィールドのプロパティで、塩は塩のパスワードで、暗号化パスワード
ロングは、タイムスタンプの形式で格納されるべき最後の時間が私のための時間になると、取得したJavaのタイムスタンプが13桁で、ここでタイムログを作成することはunsigned int型の最大数を超えて
以下は、多くの関係にユーザの役割及びユーザ役割と多くの複数に対応たRoleListで、クラスの役割は、類似の特性を有するべきです
3.2役割カテゴリ
GETを省略し、設定
クラスフィールドにおいて重要な役割もIDと名前は、プラスあなたは説明した状況とステータスを確認することができます
ユーザーの役割と権限は、多くの関係です
3.3権限クラス
getおよびsetメソッドが省略されています
そして、同様のクラスの役割は、必要なフィールドは多くありませんが、唯一のID、名前とrelationUrlですhoplinks
権限と役割は、多くの関係しています
3.4データベーステーブル
あなたのクラスは、データベース内のテーブルに関連していない場合確立するために、3つのエンティティは自動的に保存現時点では、データベース内のユーザー、役割と権限の3つのテーブルを作成します後
しかし、それは自分自身を確立することが推奨され、自動的にテーブルのコメントを作成してはならない、フィールドが最高のフィールドではありません、次の表では、ビルドテーブルのSQLを示してい
CREATE user` TABLE `(
` id` int型(10)、NOT NULL AUTO_INCREMENTを符号なし
username` VARCHAR `(20)COMMENT NOT NULL 'ユーザ名、ログインに使用'、
` password` VARCHAR(32)COMMENT NOT NULL 'パスワード' 、
`email`はVARCHAR(64)COMMENT DEFAULT NULL 'メールボックス'、
` phone`はint(11)コメントDEFAULT NULL '電話番号'符号なし
`nickname` VARCHAR(32)CHARACTER SET NULLがCOLLATE utf8mb4 DEFAULTがnull、COMMENT」ニックネームをutf8mb4_0900_ai_ciユーザー名使用している場合'
パスワード塩'、CHARACTER SET NULL `salt` VARCHAR(32)COLLATE utf8mb4 DEFAULTはCOMMENT utf8mb4_0900_ai_ci '
` VARCHAR ip`(8)COMMENT DEFAULT NULL'最後のログインIP」、
`create_time` BIGINT(13)と符号なしのNOT NULL COMMENT '登録日'、
`last_login` BIGINT(13です)COMMENTデフォルトのNULL」を符号なし最終ログイン時間」
`is_use` TINYINT(1)符号なしのNOT NULL DEFAULT '1' COMMENT ' ステータス:0 1 2ノーマルフリーズは削除'、
PRIMARY KEY(` id`)
)= 5 ENGINE = InnoDBのAUTO_INCREMENT COLLATE utf8mb4 DEFAULT CHARSET = = = utf8mb4_0900_ai_ci COMMENT "。ユーザテーブル「;
CREATE(role` TABLE `
` id` int型(10)はAUTO_INCREMENT NOT NULLを、符号なし
`NAME` VARCHAR(20です)COMMENT NOT NULL '名前'、
` description` VARCHAR(255)COMMENT DEFAULT NULLの'説明'、
`is_use` TINYINT (1)符号なしNOT NULL DEFAULT ' 1' COMMENT ' ステータス:正常0 1は推奨'、
'作成`create_time` BIGINT符号なしDEFAULT NOT NULL(13)と'0' COMMENT、
` BIGINT update_time`(13)と符号なしのNOT NULL DEFAULT '0' COMMENT '更新'、
PRIMARY KEY( `id`)
)= ENGINEのInnoDB DEFAULT CHARSET = UTF8 COMMENTの= '文字テーブル';
(CREATE permission` TABLE `
` id` int型(10)、NOT NULL AUTO_INCREMENTを符号なし
NAME` VARCHAR(20は`)COMMENT NOT NULL '名前'、
` description` VARCHAR(255)COMMENT DEFAULT NULLの'説明'、
`type`がVARCHAR (32)NOT NULL DEFAULT 'メニュー ' COMMENT ' タイプ:MENU、ボトン'、
`relation_url` VARCHAR(255)COMMENT DEFAULT NULL '連想リンク'、
` permission` VARCHAR(32)NOT NULL DEFAULT」* 'COMMENT'アクセス許可の種類:*フル「は、複数の間にコンマで区切って、新しいアップデートが表示され、削除ビューを変更、削除作成
上記の親ID」を述べたCOMMENT DEFAULT NULLの符号なし`super_id` int型(10」)は、
` create_time` BIGINT(13)NOT NULLさんにコメントを符号なし、 '作成'
BIGINT(13)とコメントが、NOT NULL '更新'を符号なしupdate_time` `
is_use` TINYINT`(1)NOT NULL符号なしDEFAULT」1'COMMENT 'ステータス:1 0ノーマル非推奨'、
PRIMARY KEY( `id`)
= utf8mb4_0900_ai_ci COMMENT)ENGINE = InnoDBのデフォルトのCHARSET = utf8mb4のCOLLATE = '許可テーブル';
4.配置shiro
4.1コンフィグでMyRealm.javaを確立
このクラスアクションは、リンクチェックの権限とログイン認証を行うことですログイン認証はすべて理解しておく必要があり、ユーザーは役割がこのリンクにアクセスする権限を持っているかどうかを確認するためのリンクを区別することです
MYREALMクラス継承AuthorizingRealm
4.1.1リンクチェック
ユーザーの役割の権限11証拠のアクセスがあるかどうかアウトのすべてを介して2つのループのためのリンクの検証方法
4.1.2ログイン認証
この方法では、言って不完全にもいくつかのコメント、言うべき主なものは、新しいSimpleAuthentication四つのパラメータであります
ユーザは、ユーザクラスを参照します
user.getPassword()は、データベースに格納されたユーザパスワードを指し
ByteSource.Util.bytes(user.getSaltは())ユーザー・パスワードの塩を意味します
getName()は、名前のレルムです
同じカテゴリ確立ShiroConfig.javaの設定パッケージの4.2
4.2.1フィルタメソッドshiroFilter
コメントは、私たちがいることを強調し、ここで、非常にはっきりと言われています
このメソッドは順番に実行されていること/ **背後に配置する必要がありますされます
残り方法4.2.2
ハッシュアルゴリズムや、ハッシュアルゴリズム最初のメソッドの数が必要なことに注意してください、私たちは、登録の方法を一致させる、または間違って行くログインする必要があります
5.登録
登録およびログインコードはむしろ直接クラスコードのインタフェースよりも、プロセスの形で示されており、直接に貼り付けされます
5.1フロントエンドの登録ページ
login.htmlにはSRC /メイン/リソース/テンプレート内に設立します
ここでは一つのインタフェースに登録して、署名します
フロントページの効果
具体的にどのように記述することは非常にシンプルなインターフェイスは、議論することではありません
5.2 UserControllerでは、コントローラパッケージに設立され、その後、登録制御方法レジストを確立します
)5.3のService Packは、UserServiceのクラスを確立ライトコントローラクラスの登録方法のレジストは、(使用する必要があります
上記の二つの方法の基本的な理解は、2つのツールの困難が、より使用すべきではありません
一つはEncryptionUtilと複雑です
複雑な方法ISNUMBERツールなどが実証されていない、これは文字列が長いデジタルまたは他の方法に変換されているかどうかを判断するだけの簡単な方法です
この方法はまた、少し後でEncryptionUtilを置きます
5.4 DAOパッケージにUserRepositoryリポジトリのインターフェースを確立します
このインターフェースは、あなたがそれを実装する必要はありません、それは自動的にあなたが問い合わせを提供するものを経由します
例えばfindByUsernameは、自動的にユーザ名フィールドに一致するように、データベースに指定した文字列を取ります
5.5ツールパッケージにComplex.javaとEncryptionUtil.java 2つのツールを確立
複合体は、複合工具であり、相関法は存在しない、静的メソッドは、クラスおよび種々の方法で直接呼び出すことができるように記憶されています
EncryptionUtilは暗号化ツールの仕事をするために設計されています
この方法は、暗号化されてくる元のパスワード文字列です
塩は塩生成されたパスワードシステム、32文字の文字列です。
パスワードは二回クラスがShiroConfig hashedCredentialsMatcherに一致する記述され、ここで()メソッドにMD5ハッシュアルゴリズムを使用して暗号化、元の塩+パスワードのパスワードです
パスワードと暗号化パスワード塩をマップに戻ります
ここでは全体の登録プロセスが完了しても
6.ログイン
6.1フロントエンドのコード
また、login.htmlがで
ここで目:SRC =「@ {/ validateCode}」文法thymeleaf、注釈付きGETコード「/ validateCode」と後端を要求することで、第一ここでは説明しません
前面表示
5.2制御カテゴリ
また、)(ログインUserControllerでloginメソッドを作成します
しかし、ここでの状況は、唯一のログインプロセスが失敗したShiroConfigでの治療の成功であります
コメントを説明するための具体的な方法はまた、比較は理解していることを言いました
無視することができる2つの行を次の@Resource、それは確認コードによって使用される方法であります
サービスとリポジトリのUserService.findByNameOrPhoneが登録され、オーバーラップして先に()メソッドを述べた使用する必要があり、ショーを繰り返してログに記録しません