【问题标题】:How to programmatically access <INTERCEPT-URL> from <HTTP> element in spring security如何以编程方式从 Spring Security 中的 <HTTP> 元素访问 <INTERCEPT-URL>
【发布时间】:2011-02-23 16:13:42
【问题描述】:

如何以编程方式访问拦截 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 安全角色映射用于限制对某些页面的访问。我想提取相同的角色映射信息(patternaccept 属性),以便仅在 html 菜单中显示每个角色有权查看的页面.

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

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

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

【问题讨论】:

    标签: java security spring spring-security spring-3


    【解决方案1】:

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

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

    有关自定义 BeanDefinitionParser 实现的用法,请参阅 Spring Security 3 - Appendix D. Extensible XML authoring

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回答。不幸的是,它没有为我提供必要的信息。 map key 匹配 url 模式,放 map value 是过滤器链(BasicAuthenticationFilter、securityContextHolderAwareRequestFilter、......、FilterSecurityInterceptor)。似乎我必须手动解析 xml 上下文才能实现我想要的。
      猜你喜欢
      • 2014-11-28
      • 2012-03-02
      • 2011-01-07
      • 2011-10-17
      • 1970-01-01
      • 2017-01-18
      • 2012-08-03
      • 2018-09-01
      • 2014-12-09
      相关资源
      最近更新 更多