Pregunta

¿Cómo puedo acceder programáticamente el contenido de las declaraciones de intercepción-url (desde el http://www.springframework.org/schema/security esquema)? P.ej,

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

El mapeo de roles de seguridad de primavera se utiliza para restringir el acceso a ciertas páginas. Quiero extraer la misma información de mapeo de roles (el patrón y aceptar atributos) para poder mostrar solo esas páginas en el menú HTML que cada rol tiene acceso para ver.

He echado un vistazo al HttpConfigurationBuilder, pero está protegido por el paquete y no parece ofrecer tanta información. También lo he intentado:

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

Pero solo logré acceder a los roles, no los patrones de URL.

¿Fue útil?

Solución

La configuración declarada con un soporte de espacio de nombres no existe en el mismo "formato" después de cargar el contexto de la aplicación.

Si desea preservar la información de mapeo de roles, debe acceder a ella mientras se transmite la configuración, y guardar los datos que necesita para el uso futuro. Puedes hacer esto subclase org.springframework.security.config.http.HttpSecurityBeanDefinitionParser, leyendo los datos que desea y delegar super.

Ver Spring Security 3 - Apéndice D. Autorización XML extensible Para el uso de la costumbre BeanDefinitionParser implementaciones.

Otros consejos

Quizás puedas verificar si getFilterChainMap() método de FilterChainProxy La clase le brinda la información relevante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top