2

我正在尝试在 Spring 中设置安全策略,以便任何人都可以读取在 roo 中创建的任何实体,但只有管理员用户(在 中指定applicationContext-security.xml)可以创建/更新/删除。在我看来,我应该能够通过定制来实现我的目标,applicationContext-security.xml但我想不出办法。我想过使用拦截网址,如:

<intercept-url pattern="/anyEntity/*?form" access="hasRole('ROLE_ADMIN')" />

但此配置不包括 DELETE,因为它是 POST 中的隐藏字段(根据文档,支持 post 方法,但没有关于如何在拦截 url 标记中指定隐藏字段值的文档)

另一种方法是在实体设置方法上使用@secured。我目前依靠 roo 来生成 getter/setter,所以我想尽可能避免使用它

我还可以编写一个自定义控制器来进行我想的过滤。但在我看来,我应该能够自定义配置。我一定遗漏了一些明显的东西,因为公共只读策略应该是一种非常常见的策略。

4

2 回答 2

0

我认为您可以使用 method="DELETE" 属性来拦截 URL,因为 roo 将隐藏的方法字段转换为 http 方法。

这里还有一些更多信息

于 2012-08-08T16:19:12.207 回答
0

这是我的做法:

    <!-- only user role can use modify methods -->
    <intercept-url pattern="/**" method="POST" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**" method="DELETE" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**" method="PUT" access="hasRole('ROLE_USER')" />
    <!-- any role can use GET methods -->
    <intercept-url pattern="/**" method="GET" access="isAuthenticated()" />
    <intercept-url pattern="/**" method="HEAD" access="isAuthenticated()" />
    <intercept-url pattern="/**" method="OPTIONS" access="isAuthenticated()" />
    <intercept-url pattern="/**" method="TRACE" access="isAuthenticated()" />
于 2012-09-02T09:49:00.060 回答