使用CUD而不是R的Spring roo安全设置?

时间:2012-08-05 22:49:12

标签: spring-security spring-roo

我正在尝试在Spring中设置安全策略,以便任何人都可以读取在roo中创建的任何实体,但只有管理员用户(在applicationContext-security.xml中指定)可以创建/更新/删除。在我看来,我应该能够通过自定义applicationContext-security.xml来实现我的目标,但我无法找到方法。我想过使用intercept-url:

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

还有一些信息here

答案 1 :(得分: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()" />