Frage

Wie kann ich programmgesteuert auf den Inhalt der Intercept-URL-Erklärungen zugreifen (von der http://www.springframework.org/schema/security Schema)? Z.B,

<http auto-config='true'>
    <intercept-url pattern="/static/**" filters="none" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    ...
</http>

Die Kartierung der Spring Security Rollens wird verwendet, um den Zugriff auf bestimmte Seiten einzuschränken. Ich möchte die gleiche Rollenzuordnungsinformationen extrahieren (die Muster und annehmen Attribute), um diese Seiten in der HTML-Menu nur anzuzeigen, die jede Rolle zugänglich hat.

Ich habe mir das angesehen HttpConfigurationBuilder, aber es ist paket geschützt und scheint nicht so viele Informationen zu bieten. Ich habe auch versucht:

  FilterSecurityInterceptor interceptor = appContext.getBean(FilterSecurityInterceptor.class);
  if (interceptor != null) {
      for (ConfigAttribute attr : interceptor.getSecurityMetadataSource().getAllConfigAttributes()) {
          // Extract the attributes ... 
          attr.getAttribute();
      }
  }

Aber ich habe es nur geschafft, auf die Rollen zuzugreifen, nicht auf die URL -Muster.

War es hilfreich?

Lösung

Die mit einem Namespace -Support deklarierte Konfiguration besteht nicht im selben "Format", nachdem der Anwendungskontext geladen wurde.

Wenn Sie die Rollenzuordnungsinformationen beibehalten möchten, müssen Sie beim Analysieren der Konfiguration darauf zugreifen und die Daten speichern, die Sie für die zukünftige Verwendung benötigen. Sie können dies durch Subklassing tun org.springframework.security.config.http.HttpSecurityBeanDefinitionParser, Lesen Sie die gewünschten Daten und delegieren super.

Sehen Spring Security 3 - Anhang D. Extensible XML Authoring Für die Verwendung von Custom BeanDefinitionParser Implementierungen.

Andere Tipps

Vielleicht können Sie überprüfen, ob getFilterChainMap() Methode von FilterChainProxy Die Klasse gibt Ihnen die entsprechenden Informationen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top