Настройка DefaultAuthenticationEventPublisher в WebSecurityConfigurerAdapter для Spring Security 5 - PullRequest
0 голосов
/ 10 октября 2019

Я обновил некоторые из наших сервисов до Spring Security 5 с версии SS 4, где была внешняя поддержка OAuth2. Я был в состоянии обновить наши услуги по большей части.

Ранее наш WebSecurityConfigurerAdapter имел следующую функцию конфигурирования, в которой мы устанавливаем applicationEventPublisher для OAuth2AuthenticationProcessingFilter, чтобы мы могли выводить сообщения журналов о AuthenticationEvents.
Но поддержка OAuth2AuthenticationProcessingFilter в SS5 теперь напрямую исключена, поскольку теперь в SS5 поддерживается O2. * Является ли это более простым способом установки AuthenticationEventPublisher без создания моего собственного фильтра и повторной части проверки подлинности, чтобы просто сделать это снова Spring?

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    OAuth2AuthenticationProcessingFilter filter = new OAuth2AuthenticationProcessingFilter();
    filter.setAuthenticationManager(authenticationManager);
    filter.setStateless(true);
    filter.setAuthenticationEventPublisher(
        new DefaultAuthenticationEventPublisher(applicationEventPublisher));
    filter.afterPropertiesSet();

    http.csrf()
        .disable()
        .anonymous()
        .disable()
        .httpBasic()
        .disable()
        .logout()
        .disable()
        .formLogin()
        .disable()
        .addFilterBefore(filter, SessionManagementFilter.class)
        .antMatcher("/actuator/**")
        .authorizeRequests()
        .antMatchers(HttpMethod.OPTIONS)
        .permitAll()
        .antMatchers("/actuator/**")
        .access("#oauth2.hasScope('auditor')")
        .anyRequest()
        .authenticated()
        .accessDecisionManager(accessDecisionManager);
  }

  @Bean
  public ApplicationListener<AuditApplicationEvent> onEventListener() {
    return (AuditApplicationEvent event) -> {
      LoggingUtil loggingFormat = new LoggingUtil();
      loggingFormat.setUser(event.getAuditEvent().getPrincipal());
      loggingFormat.setEvent("Resource Authentication");
      loggingFormat.setOutcome(event.getAuditEvent().getType());
      loggingFormat.setMessage(
          event.getAuditEvent().getData().containsKey("message")
              ? event.getAuditEvent().getData().get("message").toString()
              : "");
      String info = loggingFormat.toString();
      logger.info(info);
    };
  }

Для нашего SS 5 у нас есть

    protected void configure(HttpSecurity http) throws Exception {
    http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        SessionManagementFilter as;

        //TODO how do we setup the authenticationEventPublisher
    //filter.setAuthenticationEventPublisher(
//        new DefaultAuthenticationEventPublisher(applicationEventPublisher));

        http.csrf()
                .disable()
                .anonymous()
                .disable()
                .httpBasic()
                .disable()
                .logout()
                .disable()
                .formLogin()
                .disable()
//        .addFilterBefore(filter, SessionManagementFilter.class)
                .authorizeRequests()
                .antMatchers(HttpMethod.OPTIONS)
                .permitAll()
                .antMatchers("/actuator/**").hasAuthority("SCOPE_auditor")
                .anyRequest()
                .authenticated()
                .and()
                .oauth2ResourceServer().jwt();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...