1

以下工作正常:

<sec:authorize access="canViewUser(AMIT)">
    //SOMETHING TO BE SECURED
</sec:authorize>

但是,我想做类似的事情:

<sec:authorize access="canViewUser(${userId})">
    //SOMETHING TO BE SECURED
</sec:authorize>

但是 Spring 安全标签似乎不支持 EL,这给出了错误:

根据标记文件中的 TLD 或属性指令,属性访问不接受任何表达式

是否有任何解决方法可以将页面范围属性传递给这些标签?甚至可以将 scriptlet 解决方案视为最后的手段。

另外,TLD 在哪里提到它不接受表达式?我检查了TLD文件中的 spring 安全标签,它似乎没有在任何地方表明这个东西。

4

1 回答 1

0

我必须编写一个自定义TLD文件,其选项与原始 spring security tld 文件几乎相同,除了以下几行:

<attribute>
            <name>access</name>
            <required>false</required>
            <rtexprvalue>true</rtexprvalue>
            <type>java.lang.String</type>
            <description>
                A Spring-EL expression which is supported by the WebSecurityExpressionHandler
                in the application context. The latter will be used to evaluate the expression.
            </description>
</attribute>

它替换了原始 TLD 中属性“访问”的描述。将url属性也更改为任何其他值。这个 tld,我放在 WEB-INF 下并在我的 jsp 中使用它。

希望在未来的版本中,此功能将在 Spring 安全性中默认存在。

于 2012-05-12T14:50:13.223 回答