2012-11-13 1 views
8

Ich versuche, die Run-As-Funktion in Spring Security 3.1 zu funktionieren. Das Seltsame ist, dass ich kein einziges Beispiel finden kann. Auch die Spring Security Book behandelt das Thema überhaupt nicht.Spring Security 3.1 Run-As

Hier ist der Sicherheitsteil meines Anwendungskontextes.

<security:global-method-security 
     pre-post-annotations="enabled"> 
    <security:expression-handler ref="customExpressionHandler"/> 
</security:global-method-security> 

<bean id="runAsManager" 
     class="org.springframework.security.access.intercept.RunAsManagerImpl"> 
    <property name="key" value="my_run_as_password"/> 
</bean> 

<bean id="runAsAuthenticationProvider" 
     class="org.springframework.security.access.intercept.RunAsImplAuthenticationProvider"> 
    <property name="key" value="my_run_as_password"/> 
</bean> 
<security:http auto-config="true" create-session="always"> 
    <security:remember-me key="njc2"/> 
    <security:session-management invalid-session-url="/sessionTimeout.html"/> 
    <security:intercept-url pattern="/**" access="ROLE_USER"/> 
    <security:form-login login-page='/login.html' 
         authentication-success-handler-ref="njcAuthenticationSuccessHandler" 
         authentication-failure-url="/login-failure.html"/> 
    <security:logout invalidate-session="true" logout-url="/j_spring_security_logout" 
        logout-success-url="/login.html"/> 
</security:http> 

Zur Laufzeit Frühling ‚magisch‘ erstellt eine Instanz org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor aber verdrahten nicht meine runAsManager und verwendet daher die NullRunAsManager, die standardmäßig erstellt wird.

Können Sie mir ein gültiges Spring Security 3.1-Beispiel zeigen, das ausgeführt wird als und JSR-250-Annotationen wie verwenden?

+1

Ich war auch über das Fehlen von Beispielen verwundert, also schrieb ich vor einiger Zeit eine ausführliche: https://dzone.com/articles/spring-security-run-example – kaqqao

Antwort

3

Eigentlich kann man Spring Security XML-Namespace verwenden RunAsManager zu setzen:

<sec:global-method-security run-as-manager-ref="runAsManager"> 
    <!-- Rest of your code --> 
</sec:global-method-security> 

Ich weiß nicht, irgend out-of-box @RunAs Integration. Aber ich bin mir sicher, dass es möglich ist, dies selbst zu implementieren und mit Spring Security zu integrieren.