Динамический URL для antMancher в ResouraseServerConfiger - PullRequest
0 голосов
/ 01 февраля 2019

Как получить данные из базы данных при загрузке приложения с использованием h2 db в конфигурации Spring Resourse и передать эти данные для antMatcher и access.

Пример: открытый класс ResourceServerConfig extends ResourceServerConfigurerAdapter {

public voidconfigure (HttpSecurity http) выдает Exception {

    System.out.println(dataSource.getConnection());
    //here i am getting db object
    http.requestMatchers().and().authorizeRequests()
    .antMatchers("/bitcash/profile/find-user**").access("hasRole('ROLE_USER')")
    .antMatchers("/bitcash/profile/find-admin**").access("hasRole('ROLE_ADMIN')").and()
            .exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());

    http.csrf().disable();
    http.headers().frameOptions().disable();
}

}

, пожалуйста, помогите мне из этого.

public void configure (HttpSecurity http) выдает Exception {

    System.out.println(repo.getResourse());
    System.out.println(dataSource.getConnection());

    http.requestMatchers().and().authorizeRequests()
    .antMatchers("/bitcash/profile/find-user**").access("hasRole('ROLE_USER')")
    .antMatchers("/bitcash/profile/find-admin**").access("hasRole('ROLE_ADMIN')").and()
            .exceptionHandling().accessDeniedHandler(new OAuth2AccessDeniedHandler());

    http.csrf().disable();
    http.headers().frameOptions().disable();
}

1 Ответ

0 голосов
/ 01 февраля 2019

Spring Web предоставляет следующий интерфейс

public interface RequestMatcher {

    boolean matches(HttpServletRequest request);

}

и Spring Security, вы можете настроить его, используя

    http
        .authorizeRequests()
            .requestMatchers(new MyMatcher(db), someOtherMatcher)
                .fullyAuthenticated()

Как вы реализуете мой подход, зависит только от вас.Это может быть

public class MyMatcher implements RequestMatcher {

    @Override
    public boolean matches(HttpServletRequest request) {
        String antPatternFromDB = db.getAntPattern(request);
        return new AntPathRequestMatcher(antPatternFromDB).matches(request);
    }
}

Предполагается, что db является компонентом с доступом к БД.

@Bean
public Db db() {
  return new Db(DriverManager.getConnection("jdbc:h2:~/test", "sa", ""));
}

Обратите внимание: вместо DriverManager.getConnection следуетиспользуйте пул соединений .Я считаю, что это выходит за рамки этого ответа.

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