春季安全hasRole( 'ROLE_ADMIN')在配置和@PreAuthorize(“permitAll”)不工作?

问题描述 投票:2回答:2

我试图锁定我的整个应用程序,除了特定的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() - 但我想实现逆转。

任何建议将不胜感激!

spring annotations spring-security
2个回答
0
投票

如果您使用XML配置不要忘记添加以下属性:

      <s:global-method-security pre-post-annotations="enabled"/>

如果您使用的是Java配置不要忘记添加以下注释:

       @EnableGlobalMethodSecurity(prePostEnabled = true)

-1
投票

这几乎是类似质疑spring security 3 - Setting up a customized login,如果限制所有访问(模式/ **),以ROLE_ADMIN然后/产品permitAll如何运作的?解决办法是提供/产品IS_AUTHENTICATED_ANONYMOUSLY访问。

© www.soinside.com 2019 - 2024. All rights reserved.