2012-05-26 2 views
8

Недавно я разработал веб-приложение 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)); 
} 

Мои вопросы конкретно являются: есть ли подводные камни о таком подходе я должен быть в курсе, и есть еще более простой способ сделать Это?

+2

Это может быть сделано еще проще в EL без необходимости использования бэк-компонента: '# {request.isUserInRole ('foo')}' – BalusC

+0

, но в управляемом компоненте jsf у вас не будет доступа к запросу, правильно? –

+0

Я редко нуждался в этом в бэкбоне. Просто поместите его в атрибуты 'rendered',' readonly' или 'disabled' в представлении. – BalusC

ответ

1

Если вы используете Tomahawk в качестве дополнения к реализации JSF, большинство элементов управления имеют атрибут visibleOnUserRole. Вы можете использовать несколько имен ролей в значении.

+0

это действительно хорошая информация, я действительно ничего не знал о аддонете tomahawk, выглядит неплохо. Один вопрос, если я использую tomahawk и primefaces, вы думаете, что я могу добавить атрибут visibleOnUserRole в элемент управления праймерами (например, p: commandButton)? –

+0

Я отвечаю на свой вопрос о прозрачности и visibleOnUserRole по этой ссылке: http://cagataycivici.wordpress.com/2010/03/18/primefaces-el-extensions-for-ui-authorization/ –

Смежные вопросы