列出spring security的所有SecurityFilterChain

本文讲述一下如何在运行时列出所有的SecurityFilterChain。

java

 FilterChainProxy chain = (FilterChainProxy) ApplicationContextHolder.getContext().getBean("springSecurityFilterChain");
 List<SecurityFilterChain> filterChains = chain.getFilterChains();
 System.out.println(filterChains);

ApplicationContextHolder

主要是如何直接使用autowired注入,在启动的时候报错,因此在完全启动之后,从context里头取

@Component
public class ApplicationContextHolder implements ApplicationContextAware {

    private static ApplicationContext ctx;

    public static ApplicationContext getContext() {
        return ctx;
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        ctx = applicationContext;
    }
}

springSecurityFilterChain

spring-security-config-4.1.4.RELEASE-sources.jar!/org/springframework/security/config/http/HttpSecurityBeanDefinitionParser.java

static void registerFilterChainProxyIfNecessary(ParserContext pc, Object source) {
        if (pc.getRegistry().containsBeanDefinition(BeanIds.FILTER_CHAIN_PROXY)) {
            return;
        }
        // Not already registered, so register the list of filter chains and the
        // FilterChainProxy
        BeanDefinition listFactoryBean = new RootBeanDefinition(ListFactoryBean.class);
        listFactoryBean.getPropertyValues().add("sourceList", new ManagedList());
        pc.registerBeanComponent(new BeanComponentDefinition(listFactoryBean,
                BeanIds.FILTER_CHAINS));

        BeanDefinitionBuilder fcpBldr = BeanDefinitionBuilder
                .rootBeanDefinition(FilterChainProxy.class);
        fcpBldr.getRawBeanDefinition().setSource(source);
        fcpBldr.addConstructorArgReference(BeanIds.FILTER_CHAINS);
        fcpBldr.addPropertyValue("filterChainValidator", new RootBeanDefinition(
                DefaultFilterChainValidator.class));
        BeanDefinition fcpBean = fcpBldr.getBeanDefinition();
        pc.registerBeanComponent(new BeanComponentDefinition(fcpBean,
                BeanIds.FILTER_CHAIN_PROXY));
        pc.getRegistry().registerAlias(BeanIds.FILTER_CHAIN_PROXY,
                BeanIds.SPRING_SECURITY_FILTER_CHAIN);
    }

最后一行,注册了别名SPRING_SECURITY_FILTER_CHAIN

doc

  • 初识 Spring Security

原文发布于微信公众号 - 码匠的流水账(geek_luandun)

原文发表时间:2017-08-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

Android 6.0 运行时权限处理问题

序 自从升级到Android M以来,最大的改变就是增加了运行时权限RuntimePermission,6.0以上的系统如果没有做适配,运行了targetSDK...

22810
来自专栏Android中高级开发

Android开发之漫漫长途 Ⅳ——Activity的显示之ViewRootImpl初探

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

953
来自专栏项勇

笔记19 | 利用MediaRecorder实现录像

21510
来自专栏Android 技术栈

Android API Level、sdk版本与发行日期 对照表

1481
来自专栏增长技术

Android 相机功能模块相关库

Android’s video recording APIs are very difficult to figure out, especially sinc...

1801
来自专栏向治洪

SwipeRefreshLayout实现上拉下拉刷新

1:在布局中添加SwipeRefreshLayout和Listview组件 [html] view plain copy <?xml version=...

17910
来自专栏向治洪

android多线程下载1

想做一个下载功能,当然理想的功能要支持多任务同时下载,断点续传的功能,我想一步一步来,首先困难摆在了多任务这里 开始我的思路是在一个Service中启动下载...

20310
来自专栏james大数据架构

Android LayoutInflater详解

在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/l...

2209
来自专栏指尖下的Android

Matisse预览图片黑屏,Glide内存溢出

项目中要到图片、视频选择的功能,然后google了一下,找到Matisse,知乎的图片选择框架,用的人还挺多的,果断依赖gradle,然后开始我的踩坑之旅。 ...

1791
来自专栏Spring相关

运行时权限

我们在夸数据共享的时候,遇到危险的权限时候系统会让我们进行是否授权,只有我们授权了才能使用这些权限.比如拨号(可能引起收费的敏感权限)等,这里我们来演示一下调用...

1132

扫码关注云+社区