Недавно я разработал веб-приложение tomcat в JSP, которое использует декларативную безопасность (server.xml/web.xml), привязанную к Active Directory компании. Меня попросили добавить поддержку JSF к второстепенному проекту. Было просто преобразовать форму входа в jsf, и модель безопасности все еще работала.Является ли (isUserInRole()) самый простой способ привязать права пользователя/безопасность к кнопке JSF?
Помощник спросил, могу ли я позволить более широкой аудитории просматривать один из отчетов, но отображать кнопки действий только для небольшой группы. Будучи новичком в JSF, мне пришлось провести некоторое исследование.
Я потратил около четырех часов на поисковые запросы, такие как «безопасность кнопок jsf» и «права доступа к jsf», и пробую различные предложения, которые были в основном тупиками. Другой помощник предложил использовать модель безопасности Spring, но я не хотел иметь дело с целым набором библиотек Spring, если бы был более простой способ сделать это.
В конце концов, я наткнулся на ответ, который был невероятно прост. Мне нужно было только использовать метод HttpServletRequest: isUserInRole(), чтобы определить, имеет ли пользователь, который в настоящее время вошел в систему, разрешение на действие кнопок действий. Я использовал HttpServletRequests LOT за последние десять лет, но я не помню, чтобы когда-либо узнавал об этом методе. С JSF, это простой вопрос, чтобы добраться до этого метода, как показано ниже:
public boolean isUserInRole(String role) {
return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role));
}
Мои вопросы конкретно являются: есть ли подводные камни о таком подходе я должен быть в курсе, и есть еще более простой способ сделать Это?
Это может быть сделано еще проще в EL без необходимости использования бэк-компонента: '# {request.isUserInRole ('foo')}' – BalusC
, но в управляемом компоненте jsf у вас не будет доступа к запросу, правильно? –
Я редко нуждался в этом в бэкбоне. Просто поместите его в атрибуты 'rendered',' readonly' или 'disabled' в представлении. – BalusC