Я пытаюсь настроить 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.