スプリングデータレスト生成APIを公開して、認証とアクセス制御にスプリングセキュリティで使用されているのと同じユーザーを管理できますか?spring data rest:ユーザー管理apiを公開する方法
@Entity
public class User implements UserDetails {
....
}
春のセキュリティで使用されています:
public interface UnsecuredUserRepository extends CrudRepository<User, String> {
}
は、私が今追加したい:
@Service
public class RepositoryUserDetailsService implements UserDetailsService{
private final UnsecuredUserRepository users;
@Autowired
public RepositoryUserDetailsService(UnsecuredUserRepository users) {
this.users = users;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User one = users.findOne(username);
if (one == null) {
throw new UsernameNotFoundException("No such user");
}
return one;
}
}
それは、次の春データリポジトリを使用しています
は、エンティティを考えてみましょう管理APIを使用してユーザーを管理します。春のデータの休憩は私のためにこれを行うことができ、私は春のセキュリティを使用してそれを保護することができます。@PreAuthorize("hasRole('ROLE_USER_MANAGER')")
public interface UserRepository extends CrudRepository<User, String>, UserSignUpExtension {
@Override
@PreAuthorize("hasRole('ROLE_USER_MANAGER') or #userName == authentication?.name")
void delete(@Param("userName") String userName);
}
問題は、1つのセキュアなレポを使用して、multiple repositories for the same entities with spring data restを持つことができないということである鶏の卵の問題を作成し、(セキュリティチェックがすでに施行されているので)、デフォルトのユーザーが作成スタートアップコードを持っていることから私を防ぎます。
curlコマンドを試してください:http://www.codingpedia.org/ama/how-to-test-a-rest-api-from-command-line-with-curl/ –
curlコマンドは役に立ちません。この問題は、APIのテストではなく、最初に公開することで解決されます。 – Alpar
これは本当に面白いheheです。アクセス権のない別のリポジトリを持っているか、休止状態であるか、起動時にユーザアカウントを作成するために実行されるものがあるだけです。このレポは、とにかくクライアントには使用できません。 – Snickers3192