Spring MVC を使用して小さなアプリケーションを開発しています。これは、ユーザーがさまざまなタイプのコンテンツを配置できるある種のビルボードです。security-config.xml を使用して、アプリのさまざまなロール (ユーザー、管理者、アノン) のセキュリティを正常に構成しました。投稿するにはログインする必要があります。管理者ユーザーのみが管理者パネルなどを見ることができます。
ここでの問題は、ユーザーごとにセキュリティを設定する必要があることです。つまり、コンテンツを変更するユーザーは、コンテンツを作成したユーザーです。もちろん、最も直接的なアプローチは、関数を呼び出す直前に、ログインしたユーザーとコンテンツの作成者の両方が同じかどうかを Java でチェックすることです。このようなもの:
@RequestMapping("/listing/deletecontent.html")
public String deleteUserContent(@RequestParam String contentId) {
//Get the logged user
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
User user = userService.loadUserByUsername(userDetails.getUsername());
//Check if the user logged and the content owner are the same
if (user == the_user_that_created_the_content)
listingService.deleteContent(Integer.valueOf(contentId));
return "redirect:/listing/usercontent.html";
}
理由はわかりませんが、このアプローチは好きではありません。同じ検証を必要な場所に何度も「コピー&ペースト」するだけで、気分が良くありません。おそらく、Spring には security-config.xml で設定できる何らかのタイプの機能があり、クラスを呼び出してcontentIdパラメータを使用してすべての URL に対してこの検証を行い、それを「実際の」URL にリダイレクトする可能性があると考えていました。それはテストに合格します。わかりません、それがあなたに聞きたいことです。このアプローチについてどう思いますか? たぶん、私はうるさすぎて、そんなに悪くないのでは?それを行うための「より良い」方法を知っていますか?
どうもありがとう、ハイメ