Я хочу использовать аннотацию @RolesAllowed (или аналогичную) в моем SOAP-приложении на основе Apache-CXF.Но я не понимаю, как настроить Spring Security для этого.
Я хочу пройти проверку подлинности из заголовка XML в сообщениях SOAP.
Конфигурация безопасности конечной точки:
Map<String, Object> props = new HashMap<>();
props.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN);
props.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);
endpoint.getInInterceptors().add(new WSS4JInInterceptor(props));
endpoint.getProperties().put("ws-security.validate.token", false);
endpoint.getProperties().put("ws-security.ut.no-callbacks", true);
endpoint.getProperties().put("ws-security.ut.validator",
CredentialValidator.class.getName());
Также пытался использовать CallbackHandler.Те же результаты.
Валидатор:
public class CredentialValidator extends UsernameTokenValidator {
@Override
public Credential validate(Credential credential, RequestData data)
throws WSSecurityException {
String userName = credential.getUsernametoken().getName();
String password = credential.getUsernametoken().getPassword();
List<GrantedAuthority> authorities = new ArrayList<>();
authorities.add(new SimpleGrantedAuthority(Role.USER_ROLE));
PreAuthenticatedAuthenticationToken token = new
PreAuthenticatedAuthenticationToken(
userName,
password,
authorities);
SecurityContextHolder.getContext().setAuthentication(token);
}
}
Конфигурация Spring Security:
@EnableWebSecurity
@EnableGlobalMethodSecurity(jsr250Enabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.POST, "/services/**")
.permitAll()
;
}
}
Если я использую allowAll () в конфигурации, тогда все запросы проходят, но аннотации не выполняютсят работа.Если я использую authenticated (), я получаю «доступ запрещен» до того, как мой валидатор заработает.
Я использую аннотации @AllowedRoles в моем интерфейсе @WebService.