3

如何以编程方式访问拦截 url 声明的内容(来自http://www.springframework.org/schema/security模式)?例如,

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

Spring 安全角色映射用于限制对某些页面的访问。我想提取相同的角色映射信息(模式接受属性),以便仅在 html 菜单中显示每个角色有权查看的那些页面。

我看过HttpConfigurationBuilder,但它是包保护的,似乎没有提供太多信息。我也试过:

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

但我只设法访问角色,而不是 url 模式。

4

2 回答 2

2

加载应用程序上下文后,使用命名空间支持声明的配置不存在相同的“格式”。

如果您想保留角色映射信息,您需要在配置解析时访问它 - 并保存您需要的数据以备将来使用。您可以通过子类org.springframework.security.config.http.HttpSecurityBeanDefinitionParser化、读取您想要的数据并委托给它来做到这一点super

有关自定义实现的使用,请参阅Spring Security 3 - 附录 D。可扩展 XML 创作。BeanDefinitionParser

于 2011-02-23T08:13:42.297 回答
0

也许您可以检查类的getFilterChainMap() 方法是否FilterChainProxy为您提供了相关信息。

于 2011-01-28T18:20:03.933 回答