Предварительная авторизация не работает - PullRequest
2 голосов
/ 03 апреля 2012

Мы пытаемся обеспечить безопасность на уровне метода с помощью тегов Spring @preAuthorize.Все компилируется и работает нормально, но ограничений не бывает.Это метод только для администратора, но даже не администраторы могут получить доступ.Вот как мы настроили это в контексте:

<http use-expressions="true" create-session="never"  entry-point-ref="oauthAuthenticationEntryPoint" xmlns="http://www.springframework.org/schema/security" authentication-manager-ref="authManager">
    <intercept-url pattern="/mocks/some-service" access="hasRole('ROLE_OTHER')" />
    <form-login authentication-failure-url="/login.jsp" default-target-url="/login.jsp" login-page="/login.jsp"></form-login>
    <custom-filter ref="resourceServerFilter" after="EXCEPTION_TRANSLATION_FILTER" />

  </http>

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

А вот и сам метод:

@PreAuthorize("(hasRole('ROLE_ADMIN'))")
public Some doIt(Some Input) {
            do something;
    return some;
}

Но у каждого может быть кусок чего-то.Что мне не хватает?Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

15 голосов
/ 05 апреля 2012

Оказалось, что вы не можете иметь аннотации к методам, доступ к которым осуществляется из одного и того же класса, как частного, так и открытого. Аннотации работают только с общедоступными методами, доступными для посторонних.

Надеюсь, это поможет кому-то совершить ту же ошибку.

6 голосов
/ 03 апреля 2012

Пожалуйста, посмотрите на это: http://static.springsource.org/spring-security/site/faq/faq.html#faq-method-security-in-web-context

Подводя итог:

"Вам нужно либо переместить объявление в веб-контекст, либо переместить нужные компонентыв основном контексте приложения. "

...