我正在尝试在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,所以我想尽可能避免使用它
我也可以编写一个自定义控制器来进行过滤。但在我看来,我应该能够自定义配置。我必须遗漏一些明显的东西,因为公开的只读政策应该是一种非常常见的策略。
答案 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()" />