Spring Security を組み合わせて Spring MVC で Web アプリケーションを構築しています。私の質問は、アプリケーションの内部設計に関するものです。より具体的には、コントローラーの設定方法です。私は、ドメイン オブジェクト (所有者コントローラー、ペット コントローラー、獣医コントローラーなど) ごとに 1 つのコントローラーがあるペット クリニックの例に多くの刺激を受けました。
アプリケーションに管理バックエンド インターフェイスを導入したいと考えています。これは、各コントローラーに管理者固有のメソッドと @RequestMappings を作成することを意味します。リクエスト マッピング パスは、intercept-url パターンによって保護されるため、それらがどこにあるかを気にする必要はありません。ただし、このソリューションは少しエレガントではありません。
ペットクリニックの例では、次のようになります。
@Controller
@SessionAttributes(types = Owner.class)
public class OwnerController {
private final ClinicService clinicService;
// Front end method
@RequestMapping(value = "/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
return "owners/findOwners";
}
// Admin method
@RequestMapping(value = "/admin/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
//Admin view
return "admin/owners/findOwners";
}
}
他の選択肢は、各 @RequestMapping (またはアクションごと) に 1 つのコントローラーを用意することです。
@Controller
@RequestMapping(value = "/admin", method = RequestMethod.GET)
public class AdminController {
private final ClinicService clinicService;
// Admin method
@RequestMapping(value = "/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
//Admin specific view
return "admin/owners/findOwners";
}
}
私の意見では、これは多くのメソッドを備えた非常に堅牢なコントローラーにつながると思います。
3 番目のオプションは、それらのいくつかの種類を組み合わせることです。
@Controller
@SessionAttributes(types = Owner.class)
public class AdminOwnerController {
private final ClinicService clinicService;
// Admin method
@RequestMapping(value = "/admin/owners/find", method = RequestMethod.GET)
public String initFindForm(Map<String, Object> model) {
model.put("owner", new Owner());
//Admin view
return "admin/owners/findOwners";
}
}
私の質問は、そのための標準的なアプローチは何ですか?