Если условное отображение частей страницы контролируется страницей JSP, то контроллер должен выполнять условное заполнение модели (поскольку страница JSP и контроллер тесно связаны в слое представления).Если мы используем аннотации на сервисном уровне, это возложит ответственность на неправильный уровень приложения (на сервисном уровне вместо уровня представления).
Мое окончательное решение основано на запоминании набора пользовательских ролей в качестве атрибута пользовательского сеанса:
/* This is executed once, after user successful login. */
Set<String> roles = new HashSet<String>();
for (GrantedAuthority authority : authentication.getAuthorities()) {
roles.add(authority.getAuthority());
}
session.setAttribute("userRoles", roles);
Тогда, если я хочу условно заполнить модель, мне нужно только проверить, содержится ли необходимая роль в этом наборе.
Set<String> roles = (Set<String>) session.getAttribute("userRoles");
if(roles.contains("ROLE_ADMIN")) {
putReadersInModel(model);
}
Я думаю, что решение является чистым и сохраняетответственность за правильное заполнение модели в контроллере.