专栏首页码匠的流水账列出spring security的所有SecurityFilterChain

列出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)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • docker运行storm及wordcount实例

    本文简单介绍下怎么使用docker运行storm以及在springboot中使用storm。

    codecraft
  • 聊聊flink的Allowed Lateness

    flink-streaming-java_2.11-1.7.0-sources.jar!/org/apache/flink/streaming/api/data...

    codecraft
  • 聊聊RocketMQCanalConnector的getFlatList

    本文主要研究一下RocketMQCanalConnector的getFlatList

    codecraft
  • [android] 手机卫士号码归属地查询

    select outkey from data1 where id=”前七位手机号”

    陶士涵
  • 如何取消ajax请求的回调

    我们在开发过程中有时候会碰到这样的需求,连续发送多个ajax请求,请求个数大于等于2,后面的ajax请求发送时,如果前面的ajax请求还没有返回,就取消前面aj...

    挥刀北上
  • python 类

    首先super,我们都知道他的意思是继承父类的含义,但是python中继承父类的实现可以直接再括号中写例如ChildA和childB,这两个是一样的

    黑白格
  • 从沙漠到戈壁,到处都有我们的野外地震队

    几天前刚刚体验了新疆南部沙漠的辛苦,又接到任务,要到北疆了解可控震源试验的情况,乘飞机从库车飞到乌鲁木齐,队上派车把我接到达板城的队部。

    申龙斌
  • 「镁客·请讲」小熊尼奥熊剑明:AR教育产品没有想象中那么容易,入坑需谨慎

    镁客网
  • Java设计模式学习记录-组合模式

    今天要介绍的设计模式是组合模式,组合模式也是结构型设计模式的一种,它主要体现了整体与部分的诶关系,其典型的应用就是树形结构。组合是一组对象,其中的对象可能包含一...

    纪莫
  • mybatis动态sql之修改(学习set标签)

    我们先对Id=1的记录修改last_name=hanbin,结果:会报错,因为sql最后面多了个逗号

    绝命生

扫码关注云+社区

领取腾讯云代金券