spring mvc 3.2.3 と spring security 3.1.3 を使用して汎用コントローラーを作成しようとしています。私が達成しようとしているのは、次のようなものです:
public abstract class DataController<E extends PersistentEntity> {
protected abstract E getEntity(String id);
@RequestMapping(value="/view/{id}", method=RequestMethod.GET)
public String view(@PathVariable("id") String id, ModelMap map) {
E ent = getEntity(id);
map.put("entity", entity);
return "showEntity";
}
}
私の拡張クラスには、コントローラー名を使用して URL にアクセスできるように、クラス名に特定のコントローラー マッピングが含まれます。
@Controller
@RequestMapping("/company**")
@Secured("ROLE_ADMIN")
public class CompaniesController extends DataController<Company> {
@Autowired
private AppService appService;
@Override
protected Company getEntity(String id) {
return appService.getCompany(id);
}
}
私の問題は、@Secured が使用されているコントローラーで /view が定義されていないため、URL /company/view が ROLE_ADMIN によって保護されておらず、誰でもアクセスできることです (私はそう思います)。
これは、view メソッドをオーバーライドして会社のクラスでマッピングを定義するだけで修正できます。
. . .
@Override
@RequestMapping(value = "/view/{id}", method = RequestMethod.GET)
public String view(String id, ModelMap map) {
return super.view(id, map);
}
. . .
この場合、セキュリティは正常に機能しますが、別の方法があるかどうかを知りたいです。抽象クラスには多くのメソッドがあるため、スーパーを呼び出すためだけにすべてのメソッドをオーバーライドするという問題と混乱が生じます。
この問題を解決する方法はありますか?
助けてくれてありがとう:)