我实现了Spring security 4.2.3。在JSF-2.2 Web应用程序中,它到目前为止工作正常。现在我在从spring security的authorize标签访问jsf bean方法时遇到了问题。
这是我的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>
这里我的bean只是用于测试:
@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)
有没有人知道这方面的解决方案?
答案 0 :(得分:0)
如果我正确地阅读了Spring-Security documentation for the authorize tag,那么它似乎不支持EL(如果你想调用你自己的bean来'验证'那么你为什么要使用authorize标签?只需使用{然后在outputLabel上输入{1}}属性。