【发布时间】:2011-07-10 16:42:31
【问题描述】:
我正在尝试锁定我的整个应用程序,但特定的 URL/方法除外。
这是我的applicationContext-security.xml:
<global-method-security pre-post-annotations="enabled"/>
<http use-expressions="true">
<http-basic/>
<intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" />
<logout logout-success-url="/products" />
</http>
这是带有注释的类:
@RooWebScaffold(path = "products", formBackingObject = Product.class)
@RequestMapping("/products")
@Controller
public class ProductController {
@RequestMapping(value="/json", headers = "Accept=application/json")
@ResponseBody
@PreAuthorize("permitAll")
public String listJson() {
return Product.toJsonArray(Product.findAllProducts());
}
}
但是,它没有按预期工作。
如果我交换条件并在配置中使用permitAll 并在注释中使用hasRole(),它会按预期工作 - 但我正在尝试实现相反的效果。
任何建议将不胜感激!
【问题讨论】:
-
我在同一个地方。你有没有找到解决办法?你是怎么做到的?
-
(>..如果我交换条件并拥有...) 这是因为
/**是“高于”(优先级高于)/products。如果您在 security-context.xml 中完成(全部),那么您必须/products/**permitAllbefore/**"restrict"。
标签: spring annotations spring-security