機密情報のWEBクエリインターフェイスを実現するために、データベースのビューを使用するように動的に脱感作

はじめに:

とき機密情報のデータベース・ビュー、動的なクエリWebインタフェースの脱感作を使用してください。

標的:ウェブユーザーは管理者の役割である場合は、ユーザ情報照会インターフェースのためのインターフェース、機密情報へのユーザ戻る(ID、名前、電話番号[敏感]、ID番号[敏感])は、クエリは、テキスト形式でユーザー情報を返しますユーザーは、一般的なユーザー情報がある場合は、クエリは、脱感作後のユーザ情報を返します。

具体的な手順:

MySQLのユーザー情報ではまず、新しいテーブル、およびいくつかのデータを追加します

第二に、テーブルのビューを作成する減感作マスキング技術、携帯電話や脱感作フィールドによって解除されたid_cardです

作成 ビュー   user_info_viewをとして 選択 ID、名前、連結((電話、3)、' **** '(電話、3))のような電話、連結((電話、4)、***** ********* として id_card から USER_INFO。

 

三、SpringBootプロジェクトは、設定ファイルでは、2つの役割adminと通常のメモリを追加し、SpringSecurityを有効にすると、新しいアカウント

パッケージEleven.config; 

輸入org.springframework.context.annotation.Bean。
輸入org.springframework.context.annotation.Configuration。
輸入org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder。
輸入org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity。
輸入org.springframework.security.config.annotation.web.builders.HttpSecurity。
輸入org.springframework.security.config.annotation.web.configuration.EnableWebSecurity。
輸入org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter。
インポートorg.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
輸入org.springframework.security.crypto.password.PasswordEncoder。

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = パブリック クラス WebSecurityConfigが延びWebSecurityConfigurerAdapter { 
    @Bean 
    公共PasswordEncoder passwordEncoderを(){
         戻り 新しい)(BCryptPasswordEncoderします。
    } 
    @Overrideは、
    保護された ボイド設定(AuthenticationManagerBuilderのAUTH)をスロー例外{
        。auth.inMemoryAuthentication()withUser( "管理")パスワードロール( "ADMIN。"(PasswordEncoder()( "123456")をコードする。) 
        。auth.inMemoryAuthentication()withUser( "ユーザ")パスワード(PasswordEncoder ().encode( "123456"))の役割( "ノーマル。" ); 
    } 

    @Overrideは、
    保護された 無効の設定(HttpSecurity HTTP)は、スロー例外{ 
        http.authorizeRequests()が// 必要はありませんが保護されるURLを、保護される必要があるかを定義 
                .antMatchers( "ログイン/")。permitAll()// 誰もがログインページにアクセスできるように設定 
                .anyRequestを()。認証()   // ログイン後にすべての要求、
                。そして()
                。.formLogin()loginPage("/ログイン" 
        ; 

    } 
}
コードの表示

 

第四に、ドメインクラスを作成するのUserInfo

パッケージEleven.domain; 

パブリック クラスのUserInfo { 

    プライベート 長いID。
    プライベート文字列名;
    プライベート文字列電話。
    プライベート文字列のid_card。

    公衆 ロングのgetId(){
         戻りID。
    } 

    公共 ボイド SETID(長いID){
         この .ID = ID。
    } 

    パブリック文字列のgetName(){
         戻り名。
    } 

    公共 ボイドのsetName(文字列名){
         この .nameの=名; 
    } 

    パブリック文字列getPhone(){
         リターン電話。
    } 

    公共 ボイドsetPhone(文字電話){
         このドットフォン= 電話; 
    } 

    パブリック文字列getId_card(){
         戻りid_card。
    } 

    公共 ボイドsetId_card(文字列id_card){
         この .id_card = id_card。
    } 
}
コードの表示

 

第五に、脱感作ビュー後に元のテーブルまたはクエリの異なる役割を区別するためにマッパー、データベースにアクセスするためのインターフェース、2つのクエリメソッドを作成します

パッケージEleven.mapper; 

インポートEleven.domain.UserInfo;
 インポート org.apache.ibatis.annotations *。; 


@Mapper 
パブリック インターフェイスUserMapper { 


    // テキスト形式でユーザー名の問い合わせ、元のテーブル、機密情報 
    @Select(「選択* WHERE NAME =から#1 USER_INFO {名} " 
    のUserInfo findByName(文字列名); 

    // ユーザ名クエリ、クエリテーブルビュー減感は、機密情報の脱感作が表示 
    @Selectは、(" user_info_view SELECT * FROM場所名=# 名前} { " 
    のUserInfo findByNameSec(文字列名); 
}
コードの表示

 

六個のImplをファイルと作成サービス

 

パッケージEleven.service; 


輸入Eleven.domain.UserInfo; 

パブリック インターフェースUserServiceの{ 
    
    パブリック(文字列名)を検索ユーザー情報。

    公共のUserInfo findSec(文字列名)。

}
コードの表示

 

パッケージEleven.impl; 

輸入Eleven.domain.UserInfo;
輸入Eleven.mapper.UserMapper;
輸入Eleven.service.UserService。
輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.stereotype.Service。


@Service 
パブリック クラス UserServiceImplは実装UserServiceの{ 
    @Autowired 
    プライベートUserMapper userMapperを。


    @Override 
    公共  {(文字列名)を見つけるのUserInfo
         を返す(名前)userMapper.findByNameを。
    } 

    公共  のUserInfo findSec(文字列名){
        返すuserMapper.findByNameSec(名); 
    } 
}
コードの表示

 

七、脱感作のビューでSQLを実行するための一般ユーザ、最終的には元のデータベーステーブルの管理ユーザーにSQLクエリを実行し、ログオンしてますユーザーの役割、異なる機能のサービスコールでさまざまな役割、で取得要求コントローラファイルを作成しますお問い合わせ

 

パッケージEleven.controller; 

輸入Eleven.domain.User。
輸入Eleven.domain.UserInfo;
輸入Eleven.service.UserService。
輸入org.springframework.beans.factory.annotation.Autowired;
輸入org.springframework.security.core.Authentication。
輸入org.springframework.security.core.context.SecurityContextHolder。
輸入org.springframework.web.bind.annotation.GetMapping。
輸入org.springframework.web.bind.annotation.RestController。

@RestController 
パブリック クラスUserControllerで{ 
    @Autowired 
    プライベートUserServiceのUserServiceのを。

    (@GetMapping「/ findByName」パブリックオブジェクトfindByName(文字列名){
         / ** 
         *ログオン取得し、ユーザの役割、異なる機能のサービスコールに異なる役割は、最終的に別のSQLクエリを実行
         * / 
        認証AUTH = SecurityContextHolder.getContext( ).getAuthentication();
         IF(auth.getAuthorities()のtoString()に等しい( "[ROLE_ADMIN]。" )){ 
            のUserInfoユーザー情報 = userService.find(名前);
             戻りユーザー情報を; 
        } 
         そう IF(auth.getAuthorities() .toString()。等号( "[ROLE_normal]" )){ 
            のUserInfoユーザー情報 =userService.findSec(名);
            返すのUserInfoを。
        } 
         {
              戻りauth.getAuthoritiesを()toString()を。
        } 

    } 

}
コードの表示

 

 八、テストおよび認定

1、アクセスSpringBootのWEBは、ログインページを入力します。

 

 図2は、以下に示すように管理者、情報問合せインタフェースへのユーザアクセスを使用して、ユーザがログインした後に、平文のユーザ情報を返します

図3に示すように、ユーザのログインアクセスを使用して、通常のユーザは、示されるように、ユーザ情報は、脱感作後に返されます

本番環境では、Webアプリケーションのための脱感作の動的なビューを達成するためのデータベース技術を使用して、ユーザーが脱感作の役割の前と後にクエリ結果を返すことができます。しかし、すべての機密データテーブルはビュー、データベースによって占められ、余分なストレージスペースを生成するために必要とされ、目標を達成するために、開発者は、追加の開発努力が必要です。

 

おすすめ

転載: www.cnblogs.com/Eleven-Liu/p/11234324.html