2012-04-03 10 views
2

Wir versuchen, die Sicherheit auf Methodenebene mit Spring @ PreAuthorize-Tags zu setzen. Alles kompiliert und läuft gut, aber die Einschränkungen passieren nicht. Dies ist eine Nur-Admin-Methode, auf die auch Nicht-Administratoren zugreifen können. Hier ist, wie wir es im Kontext konfiguriert haben:preAuthorize Annotation scheint nicht zu funktionieren

<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" /> 

Und hier ist die Methode selbst:

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

Aber jeder ein Stück von etwas haben kann. Was vermisse ich? Jede Hilfe wird sehr geschätzt.

Antwort

15

Es stellte sich heraus, dass Sie keine Anmerkungen zu Methoden haben können, auf die innerhalb derselben Klasse zugegriffen wird, egal ob privat oder öffentlich. Die Anmerkungen funktionieren nur für öffentliche Methoden, auf die von Außenstehenden zugegriffen wird.

Hoffe, dass jemand den gleichen Fehler macht.

+1

http://static.springsource.org/spring-security/site/faq/faq.html#faq-method-security-in-web-context Dieser Link weist auf die Sicherung von Service-Layer-Methoden hin. Sie werden häufig von anderen privaten/öffentlichen Methoden verwendet. –

+1

ist es tatsächlich! Ich hatte PreAuthorize für die erste aufgerufene Methode, die korrekt ausgelöst wurde, und dann, wenn diese Methode eine andere gesicherte Methode in derselben Klasse aufgerufen hat, nicht. Verbrachte Zeit durch verschiedene Handler und Evaluatoren, und das war alles, was es war .... – muttonUp

+0

Danke für 'nur Arbeit an öffentlichen Methoden', was irreführend ist, dass die Methode registriert ist, um Anfragen zu behandeln, sondern nur geschützt, wenn öffentlich. – Bax

Verwandte Themen