Безопасность Spring: несколько цепочек фильтров и UserDeatailsServices - PullRequest
0 голосов
/ 04 августа 2020

У меня вопрос о конфигурации безопасности Spring.

Предположим, у меня есть два разных внутренних класса, которые расширяют WebSecurityConfigurerAdapter, используют собственные реализации UserDeatailsService и настраивают HttpSecurity.

Насколько я понимаю, каждый класс будет иметь локальный AuthenticationManager, построенный с переопределенной функцией configure(AuthenticationManagerBuilder auth) и собственной цепочкой фильтров, настроенной с помощью configure(HttpSecurity http).

Теперь, если мне нужно предоставить разные настраиваемые фильтры UsernamePasswordAuthenticationFilter для обеих цепочек фильтров, как мне сделай это? Чтобы настроить UsernamePasswordAuthenticationFilter, нам необходимо предоставить AuthenticationManager, и обычно это делается путем переопределения authenticationManagerBean ().

    @Bean(name = "adminAuth") //BeanIds.AUTHENTICATION_MANAGER
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
         return super.authenticationManagerBean();
    }

    @Bean(name = "adminFilter")
    public UsernamePasswordAuthenticationFilter authenticationFilter() throws Exception {
         UsernamePasswordAuthenticationFilter filter = new UsernamePasswordAuthenticationFilter();
         filter.setUsernameParameter("email");
         filter.setAuthenticationManager(authenticationManagerBean());
         filter.setFilterProcessesUrl(LOGIN_PROCESSING_URL);
         filter.setRequiresAuthenticationRequestMatcher(new AntPathRequestMatcher("/admin/*", "POST"));
         return filter;
    }

Но, как я понимаю, authenticationManagerBean() глобально предоставляет родительский экземпляр AuthenticationManager, так откуда же Manager знает, какой цепочка фильтров, чтобы добавить настраиваемый фильтр? И как фильтр узнает, что он предполагает использовать локальный менеджер (например, укажите c UserDetailsServiceImpl)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...