Camel REST и Spring Security Java Конфигурация - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь настроить Camel REST для использования basi c auth с простым именем пользователя / паролем из моего application.properties и не могу на всю жизнь настроить Camel Spring Security для этого. Я пытаюсь следовать документации компонента Spring Security , в которой, похоже, отсутствует пример настройки необходимых bean-компонентов. Я нашел недостающий пример здесь в разделе «Управление доступом к маршрутам Camel», но он показывает только конфигурацию xml.

Как мне настроить требуемый компонент SpringSecurityAuthorizationPolicy? Ему нужны AuthenticationManager и AccessDecisionManager, а также, кажется, требуется, чтобы я установил его SpringSecurityAccessPolicy, что я понятия не имею, как это сделать.

Мне еще не удалось их протестировать, потому что Я не могу настроить свои beans, но мой маршрут отдыха выглядит так:

rest("/ingest")
            .post("/json").consumes("application/json")
            .route()
            .process(authProcessor)
            .policy(authPolicy) // this is the bean I don't know how to configure
            .to("direct:ingest")
            .endRest();

, а мой AuthProcessor (взятый из компонента camel do c) выглядит так:

@Component
public class AuthProcessor implements Processor {

    public void process(Exchange exchange) {
        String userpass = new String(Base64.decodeBase64(exchange.getIn().getHeader("Authorization", String.class)));
        String[] tokens = userpass.split(":");

        // create an Authentication object
        UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(tokens[0], tokens[1]);

        // wrap it in a Subject
        Subject subject = new Subject();
        subject.getPrincipals().add(authToken);

        // place the Subject in the In message
        exchange.getIn().setHeader(Exchange.AUTHENTICATION, subject);
    }
}

и вот моя сломанная конфигурация bean-компонентов, чего она стоит:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Bean
public SpringSecurityAuthorizationPolicy springSecurityAuthorizationPolicy(
        AuthenticationManager authenticationManager, AccessDecisionManager accessDecisionManager) {
    SpringSecurityAuthorizationPolicy policy = new SpringSecurityAuthorizationPolicy();

    SpringSecurityAccessPolicy springSecurityAccessPolicy = new SpringSecurityAccessPolicy();

    policy.setAuthenticationManager(authenticationManager);
    policy.setAccessDecisionManager(accessDecisionManager);
    policy.setSpringSecurityAccessPolicy(????);

    return policy;
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser("user").password("pass").roles("USER");
}

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

@Bean
public AccessDecisionManager accessDecisionManager() {
    AffirmativeBased affirmativeBased = new AffirmativeBased(ImmutableList.of(
            new RoleVoter()
    ));

    affirmativeBased.setAllowIfAllAbstainDecisions(true);

    return affirmativeBased;
}
}

Я бился головой о стену, пытаясь понять это, поэтому пример того, как это сделать, был бы потрясающим. Похоже, что конфигурация xml для того, что я хочу сделать (во второй ссылке), достаточно проста, но я не могу воспроизвести ее в конфигурации Java.

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