Jersey、Springで今すぐREST APIを使用しています。後でAndroid/iOSでアクセスします。 ジャージーリソースに、たとえば@Path("/user/{userID}/settings"
のようなユーザー設定がある場合)。すべてのユーザーが自分の設定にのみアクセスできるようにするにはどうすればよいですか?私はspring-security-oauth2についてたくさん読んでいます。しかし、限り、私はあなたが本当にユーザであることを確認することができますが、彼/彼女は他のユーザーの設定にアクセスすることができます違いを確認しないことを理解!ユーザーはREST APIリクエストで自分のデータにしかアクセスできないようにしてください
-1
A
答えて
0
必要なものを認可といいます。
認可は、各ユーザーのアクセスのレベルをdistingushすることができます。 実際には大きな話題です。役割、アクセス許可、ACLを使用して、サービスを保護することができます。あなたのCustomUserDetailsを作成
public Settings find() {
UserDetails customUserDetails = (CustomUserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return setingsService.findByUser(customUserDetails.getUsername());
}
:
あなたのタスクを解決するための最も簡単な方法は次のように、パス/user/settings
を使用して認証yourseftを見つけることです
public class CustomUserDetails implements UserDetails {
private User user;
private Collection<? extends GrantedAuthority> authorities;
public CustomUserDetails(User user) {
this.user = user;
}
public User getUser() {
return user;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<GrantedAuthority> authorities = new ArrayList<>();
for (Authority authority : user.getAuthorities()) {
authorities.add(new SimpleGrantedAuthority(authority.getName()));
}
return authorities;
}
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUsername();
}
// implement other methods
}
をそしてCustomUserDetailsService:
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Autowired
private UserService userService;
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userService.findByUsername(username);
// check if exist
}
return new CustomUserDetails(user);
}
}
+0
パスが変更されなければならない理由はなく、 'SecurityContextHolder.getContext()。getPrincipal()'の呼び出しはRESTの原則を多少壊しているようです...サーバー側はコンテキストを保持する必要はありません。同じ原則が、セキュリティコンテキストが設定されていなくても、リクエストのみを見ることで適用できます。 – RudolphEst
関連する問題
- 1. REST APIを使用してVSTS内の自分のリポジトリにアクセスできない
- 2. 自分のユーザーでphpMyAdminを実行してください
- 3. Angular2でDjango REST APIにアクセスしようとしています
- 4. User Profile REST APIを使用してユーザープロパティにアクセスしてください
- 5. Rest API-JIRAからデータにアクセスできない
- 6. Rest APIへのすべてのリクエストに1つのHttpServletを使用しないでください
- 7. PlayでContent-Typeをリクエストしてください! REST Webservicesのフレームワーク
- 8. 私は自分のSQLサーバーからいくつかのjsonデータにアクセスしようとしています
- 9. xamppで自分のlocalhostにアクセスしようとしている
- 10. 自分のアプリケーションフォルダにアクセスしているかどうかを確認してください
- 11. Wowza REST APIにアクセスできない
- 12. AWS EC2によってバックエンドとして作成された自分のアンドロイドアプリのAPIにアクセスできない
- 13. ajaxリクエストから来るデータには何もしないでください
- 14. Angularリクエストから返されたデータにアクセスできない
- 15. Slim rest apiでPOSTリクエストのJSONリクエスト本体にアクセスするにはどうすればよいですか?
- 16. Firebase:自分のイベントを登録しないでください
- 17. ユーザーが自分のデータ/情報のみを照会できることを確認してください。
- 18. スプリングブートを使用しているときにREST APIにアクセスできない
- 19. instagram APIの自分のフォロワーにアクセスできない
- 20. ロールの1人のユーザーだけがRESTリソースにアクセスできるように、RESTリソースを保護する方法を教えてください。
- 21. 別のユーザーが自分のOracleテーブルにアクセスできるようにします
- 22. REST APIのコンシューマが内部の場合、IANAに自分のメディアタイプを登録してください。
- 23. Microsoft Graph APIにアクセスするには、保存されたユーザー(サインインなし)を使用してください。
- 24. 'と' Googleヘルプのキーワードヘルプapiの「自分で試してください」
- 25. ユーザーのログイン後に何かしないでください
- 26. ruby rest-client:決してタイムアウトしないでください。
- 27. 自分のサイトにアクセスしようとしているときに内部サーバーにアクセスしています
- 28. youtube API v3にもっと早くアクセスしてください。
- 29. Django rest APIでログインを確認し、ネイティブフロントエンドに反応してください。
- 30. 認証されたユーザーがURLにアクセスできるかどうかを確認してください
プライベートデータの各要求の前に、ユーザーが認証されていることを確認するだけです。 – Chloe
必要な作業を行うには、セキュリティのレイヤーが必要になるでしょう。 OAuthでは、ユーザーを認証したり、役割を割り当てることさえできますが、各URLパスを保護する必要があります。 '/ user/ABC/settings'と'/user/DEF/settings'をロール/パーミッションごとに個別に設定します。セキュリティは、以下のJ-Alexの回答に従って、Jerseyフレームワークの上のレイヤー(ロードバランサなど)またはその内部に提供することができます。 2番目のオプションは簡単です。 – RudolphEst