2013-07-17 11 views
0

В нашем проекте у нас есть страницы JSF2, используемые во внутренней сети компании. Но мы собираемся открыть эти страницы в Интернете. Таким образом, страницы будут доступны всем. Но некоторые поля не будут отображаться, если пользователь приходит из Интернета.Авторизация в компонентах JSF2

Я знаю, что можно написать рендер-атрибут для каждого компонента, такого как «userIsInRole». Но дополнительный «визуализированный» контроль не кажется эффективным и изящным методом. Поэтому я планирую отметить компоненты, которые собираются быть оказаны в Интернете, используя пользовательский атрибут, как показано ниже:

<h:inputText context="internet" /> 
... 

В визуализатора от inputText или компонентного кода:

if(user is from Internet && context = "internet") { 
    return true; // or render... whatever 
} 

Если компонент не помечен как Интернет, то это означает, что он будет доступен (вынесен) только изнутри компании.

Возможно ли реализовать авторизацию с использованием компонентов JSF2 в соответствии с заданным атрибутом? Есть ли лучшие варианты? Или я должен создавать отдельные страницы для пользователей Интернета?

Мы используем: PrimeFaces + Spring в нашем проекте.

Спасибо

ответ

1

Это смешно. В чем разница в усилия в конечном счете, с использованием

<h:inputText context="internet" /> 

против

<h:inputText rendered="#{intranet}" /> 

?

Если ваша единственная проблема заключается в том, что вам нужно повторить все условие каждый раз, заканчивающиеся в уродливом коде, как так

<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" /> 
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" /> 
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" /> 
... 

затем просто реорганизовать условие для одного запроса переменной области видимости

<c:set var="intranet" value="#{not (user.hasRole('internet') and context eq 'internet')}" scope="request" /> 
... 
<h:inputText rendered="#{intranet}" /> 
<h:inputText rendered="#{intranet}" /> 
<h:inputText rendered="#{intranet}" /> 
... 
Смежные вопросы