Доступ к управляемым компонентам JSF в теге authorize безопасности Spring
Я реализовал Spring security 4.2.3. в веб-приложении JSF-2.2, и пока он работает нормально. Теперь у меня проблема с доступом к методу bean-компонента jsf из тега авторизации Spring Security.
Это моя таблица данных xhtml, где мне нужно запретить доступ в некоторых строках в соответствии с данными элемента:
<p:dataTable var="item" value="#{itemService.items}">
<p:column headerText="Id">
<h:outputText value="#{item.id}" />
</p:column>
<p:column headerText="Name">
<h:outputText value="#{item.name}" />
</p:column>
<p:column headerText="Security">
<sec:authorize access="#{securityService.checkAccessByItemId(item.id)}">
<h:outputLabel value="#{helloWorld.secure}"/>
</sec:authorize>
</p:column>
</p:dataTable>
А вот мой боб как раз для тестирования:
@ManagedBean(name="securityService")
@RequestScoped
public class SecurityService {
public boolean checkAccessByItemId(int id) {
if(id==5) {
return false;
} else {
return true;
}
}
}
Вот мой taglib.xml:
<facelet-taglib>
<namespace>http://www.springframework.org/security/tags</namespace>
<tag>
<tag-name>authorize</tag-name>
<handler class>org.springframework.faces.security.FaceletsAuthorizeTagHandler</handler-class>
</tag>
</facelet-taglib>
Я получаю это исключение:
org.springframework.expression.spel.SpelParseException: Expression [#{securityService.checkAccessByItemId(item.id)}] @1: EL1043E: Unexpected token. Expected 'identifier' but was 'lcurly({)'
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.raiseInternalException(InternalSpelExpressionParser.java:1006)
Кто-нибудь знает решение для этого?
1 ответ
Если я правильно прочитал документацию Spring-Security для тега authorize, кажется, что EL там не поддерживается (зачем вам в любом случае использовать тег authorize, если вы хотите вызывать свой собственный bean-компонент для "проверки" вещей? Просто используйте rendered
атрибут на выходной ярлык тогда.