Cómo acceder programáticamente a desde el elemento en la seguridad de la primavera
-
27-10-2019 - |
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.
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.