Spring config hasRole ('ROLE_ADMIN') в конфигурации и @PreAuthorize ("allowAll") не работает? - PullRequest
2 голосов
/ 08 марта 2011

Я пытаюсь заблокировать все приложение, кроме определенного 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() в аннотации, это сработает, как и ожидалось - но я пытаюсь добиться обратного.

Любой совет будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 28 июля 2016

Если вы используете конфигурацию XML, не забудьте добавить следующий атрибут:

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

Если вы используете конфигурацию Java, не забудьте добавить следующую аннотацию:

       @EnableGlobalMethodSecurity(prePostEnabled = true)
0 голосов
/ 08 марта 2011

Это почти похоже на вопрос Spring Security 3. Настройка настраиваемого имени входа , если вы ограничите весь доступ (pattern / **) для role_admin, то как будет работать allowAll on / product?Решением было бы предоставить IS_AUTHENTICATED_ANONYMOUSLY доступ к /product.

...