碑文は:springbootとthymeleafを学んだ後、あなたの手を練習するためのプロジェクトを完了したいと思い、その後、使用springboot + MyBatisのとブログシステムを完成thymeleaf、いくつかの問題は、自分自身の学習経験として記録されているこれらの問題の完了時に発生。Tumo TyCodingプロジェクトのメイングループで、このおかげで、彼らあまりにも料理が、多くの場所が分かりますが、まだよく私を務めていません。
シンプルな面での認証と承認のための小型かつ柔軟なセキュリティフレームワークとして四郎が、単純ではないが、非常に簡単に開始できます。ここでは、特定のプロセスを統合史郎です。
1. [追加の依存
1 <! -シロ和スプリング整合- > 2 <依存性> 3 <のgroupId> org.apache.shiro </ groupIdを> 4 <たartifactId>シロスプリング</たartifactId> 5 <バージョン> 1.3.2 </バージョン> 6 </依存> 7 <! -シロ核心包- > 8 <依存性> 9 <のgroupId> org.apache.shiro </ groupIdを> 10 <たartifactId>シロコア</たartifactId> 11 <バージョン> 1.3 0.2 </バージョン> 12 </依存関係>
基本パッケージspringbootコンソールでエンティティクラスをスキャンし、スキャン2. [追加注釈
私は本当に不注意な試みで、包むために、このエラーをキャッチしているのでこれだけのバグを見つけるために、1日の午後を探します。それは、同じまたおおよそ史郎のSSMと統合され、私たちはweb.xmlにいくつかの設定情報を追加する必要がされている場合。
特定のは、同様の処理します。
@SpringBootApplication(scanBasePackages = "cn.zhq" ) @EntityScan( "cn.zhq.system.entity" ) パブリック クラスMyBlogApplication { 公共 静的 ボイドメイン(文字列[]引数){ SpringApplication.run(MyBlogApplication。クラス)。 } }
3.カスタマイズレルムドメイン
個人的にレルムは、データ・ソースと等価であることを感じて、領域からいくつかのデータを取得するため史郎、ユーザーの認証と承認することを確認します。
3.1 usermapperインタフェース
@Mapper パブリック インターフェイスUserMapper { / ** *データユーザによれば、名前問い合わせ * / SYSUSER findByName(文字列名)であり; }
3.2プロファイルusermapper.xml
<?xmlのバージョンは、= "1.0"エンコード= "UTF-8"?> <DOCTYPEマッパーPUBLIC! " - // mybatis.org//DTDマッパー3.0 // EN" 「http://mybatis.org/dtd/mybatis -3- mapper.dtd」> <名前空間マッパー= "cn.zhq.system.mapper.UserMapper"> <SELECT ID = "findByNameは" resultTypeと= "SYSUSER"のParameterType = "文字列"> 選択 tb_userから場所名= * # {ユーザー名} </選択> </マッパー>
3.3書き込みカスタムレルムと継承されたAuthorizingRealm
ここでの唯一の認証方式を投稿。
@Autowired プライベートUserMapper UserMapper; @Overrideは 、保護 AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken AuthenticationToken)がスロー含むAuthenticationException { // ログインユーザ名とパスワード(トークン)のために1. UsernamePasswordToken upToken = (UsernamePasswordToken)AuthenticationToken; 文字列名 = upToken.getUsername(); 文字列のパスワード = 新しい新しい文字列(upToken.getPassword()); // 2.データベース・ユーザー名クエリに応じ SYSUSERをユーザ= userMapper.findByName(ユーザ名); // ユーザが存在するか、または3であるか否かを、パスワードは同じです。 IF(!ユーザー= ヌル && user.getPassword()のequals(パスワード)。){ // 4.セキュリティデータの一貫性のリターンである場合は // コンストラクタ:データセキュリティ、パスワード、レルムドメイン SimpleAuthenticationInfo情報= 新新 SimpleAuthenticationInfo(ユーザー、ユーザーが。 getPasswordに()、この.getName()); 戻り値の情報; } // 5.一貫性のない、リターンヌル(スロー) の戻り はnull ; }
史郎の設定クラスの4準備
セキュリティマネージャ4.1
// 設定カスタムレルム @Bean 公共AuthRealm getRealm(){ 戻り 新しい新)(AuthRealmを; } // 設定セキュリティマネージャ @Bean 公共セキュリティマネージャセキュリティマネージャ(AuthRealmレルム){ // デフォルトのセキュリティマネージャ DefaultWebSecurityManagerのSecurityManager = 新しい新DefaultWebSecurityManager(領域); // セキュリティマネージャ統合管理するカスタムレルム securityManager.setRealm(分野); リターンのSecurityManager; }
4.2のconfigureフィルター工場
@Bean 公共ShiroFilterFactoryBean shiroFilter(セキュリティマネージャのSecurityManager){ // 1.フィルタプラント作成 ShiroFilterFactoryBean FilterFactory = 新しい新しいShiroFilterFactoryBeanを(); // 2.セキュリティマネージャセット filterFactory.setSecurityManager(セキュリティマネージャ); // 3.全体構成を(ジャンプ許可されたジャンプページのログインページ) filterFactory.setLoginUrl( "#"); // ジャンプURLアドレス filterFactory.setUnauthorizedUrl( "#"); // 不正なURLの リターンFilterFactory; }
5.書き込み制御方法
(値= "/ログイン" @RequestMapping ) @ResponseBody パブリック文字列のログイン(文字列名、文字列のパスワード){ 試み{ 件名件名 = SecurityUtils.getSubjectを(); UsernamePasswordToken uptoken = 新しいUsernamePasswordToken(ユーザ名、パスワード); subject.login(uptoken)。 リターン「登录成功」。 } キャッチ(例外e){ リターン "用户名或密码错误" 。 } }
6.ログイン
6.1 MD5暗号化されたパスワードを取得します
パスワードは史郎が提供するのMD5の方法を使用して暗号化されているため。ダイレクトプリントのパスワード暗号化後のトラブルを避けるために。
塩(暗号化された文字列の混乱)| |暗号化時間パラメータの意味はMd5Hash暗号化されたコンテンツを表しています
System.out.println(新 Md5Hash( "123456"、 "zhangbo"、3).toString());
あなたは暗号化されたパスワードの使用が成功着陸することができ見ることができますが、元のパスワードを使用して着陸が成功しない、することができ、パスワードは暗号化されている中で、ユーザーの特定のビジネス・ロジックを追加します。