Witam,
pracuję obecnie nad zabezpieczeniem API ze springiem security. URLe ze słowem kluczowym public mają być odbezpieczone, natomiast, ze słowem kluczowym private mają być zabezpieczone z basic auth. O to, w jaki sposób próbowałem to osiągnąć:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private final static RequestMatcher PUBLIC_API_REQUEST_MATCHER = request -> request.getRequestURI().contains(ApiAccess.PUBLIC_API);
private static final RequestMatcher PRIVATE_API_REQUEST_MATCHER = request -> request.getRequestURI().contains(ApiAccess.PRIVATE_API);
@Configuration
@Order(2)
public static class SecuredApisConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers(PRIVATE_API_REQUEST_MATCHER)
.authenticated()
.and()
.httpBasic();
}
}
@Configuration
@Order(1)
public static class UnsecuredApisConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.requestMatchers(PUBLIC_API_REQUEST_MATCHER)
.permitAll();
}
}
}
Jednak w tym przypadku wszystkie są odbezpieczone. Próbowałem rownież używając jednego przeciążenia metody configure i po prostu po and() dodawałem co ma być zabezpieczone, a co nie. Oba podejścia powodują, że albo wszystkie API są zabezpieczone, albo odwrotnie. Próbowałem również różnych orderów.
Ma ktoś jakiś pomysł jak coś takiego osiągnąć?
Pozdrawiam,
Dreando.