JDLファイルを使用してUser、Role、userRoleを生成するjhipsterの注意事項と操作方法

1. 注意事項

  • jhipster は SpringSecurity+jwt プロジェクトを自動的に作成するため、User エンティティ クラスと userJWTController を自動的に作成および管理し、jdl ファイルを実行すると、カスタムで記述された User クラスを自動的にスキップし、他のステートメントを実行します。jhipster が自動作成する User クラスに他のフィールドを追加する必要がある場合は、事前に生成された User.java ソース ファイルに他の属性と get/set メソッドを手動で追加するしかありません。
  • role_code データ フィールドは String 型である必要があり、フォームは ROLE_ADMIN であり、ROLE_(Spring Security の必須要件) で始まる必要があります。

2. 手順

  • mono1.jdl という名前の JDL ファイルを取得したら、ターミナルでjhipster jdl mono1.jdlコマンド、次のことを行う必要があります。

1.userRoleRepositoryこのウェアハウス クラスに JPA ネイティブ クエリ ステートメントを追加します。

/*
通过userID获取roleCode
(roleCode 表示角色的英文名,比如ROLE_ADMIN,是String;
roleId 表示数据库表role的Id号,是Long)
*/
@Query("select r.roleCode from UserRole ur left join Role r on ur.roleId = r.id where ur.userId = ?1")
   List<String> getAllRoleCodeByUserId(Long userId);

2.DomainUserDetailsServiceクラスで、同じ名前の対応するメソッドを次のように変更します。
コード分​​析: 入力パラメーターはデータベースに対応するユーザー クラス オブジェクトであり、戻り値は Spring Security 配下のユーザー クラス オブジェクトです。つまり、入力されたユーザーから userId を取得し、さらに roleCode を取得し (userRoleRepositoryクラスに JPA ネイティブ アソシエーション クエリ ステートメントを 1 ステップで記述します)、コンストラクターに String 型の roleCode を割り当てますSimpleGrantedAuthority(なぜ強調するのか)。 String 型 ( String 型ではないため、基になるソース コードを自分で表示できます)、authorities という名前のリスト コレクションが形成されます。SpringSecurity 配下の User に対応するプロパティに値を代入して返します。

   private org.springframework.security.core.userdetails.User createSpringSecurityUser(User user) {
    
    
        List<GrantedAuthority> authorities = userRoleRepository
            .getAllRoleCodeByUserId(user.getId())
            //.findAllByUserId(user.getId())
            .stream()
            .map(roleCode->new SimpleGrantedAuthority(roleCode))
            //.map(userRole -> new SimpleGrantedAuthority(userRole.getRoleCode()))
            .distinct()
            .collect(Collectors.toList());
        return new org.springframework.security.core.userdetails.User(user.getLogin(), user.getPassword(), authorities);
    }

その後、正常に実行できます。

おすすめ

転載: blog.csdn.net/qq_45486709/article/details/123308596