【发布时间】:2018-05-24 22:56:01
【问题描述】:
我实现了 Spring security 4.2.3。在 JSF-2.2 Web 应用程序中,到目前为止它工作正常。现在我从spring security的授权标签访问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)
有人知道解决办法吗?
【问题讨论】:
-
你检查过 Spring EL 是否支持参数化方法调用吗?
-
当我调用不带参数的方法时也会出现同样的错误
-
现在我正确阅读了错误(并检查了 Spring Security 文档!!!)您确定可以在其中使用 EL 吗? docs.spring.io/spring-security/site/docs/4.2.x/reference/html/…
标签: spring security jsf el authorize