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);
}
その後、正常に実行できます。