Chcę dodać do aplikacji uprawnienia dostępu do zasobu/ów.
Po ustawieniu własnej konfiguracji, w postmanie otrzymuję 401.
Wywołuję endpoint zwracający klienta po PESELU:
http://localhost:9070/api/customer/96112701500
Konfiguracja:
@Configuration
@RequiredArgsConstructor
@Order(1)
public class ModSecurityConfiguration extends WebSecurityConfigurerAdapter {
private final DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.requestMatchers()
.antMatchers("/api/orders/**", "/api/customer/**")
.and()
.httpBasic()
.and()
.authorizeRequests()
.anyRequest()
.hasRole("MOD")
.and()
.csrf()
.disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("SELECT e.login,e.password,e.enabled FROM rc_employee e WHERE e.login = ?")
.authoritiesByUsernameQuery("SELECT rc_employee.login, auth.name" +
"FROM rc_authority auth" +
"INNER JOIN rc_employee_rc_authority emp_auth ON emp_auth.id_rc_authority = auth.id_rc_authority" +
"INNER JOIN rc_employee ON rc_employee.id_rc_employee = emp_auth.id_rc_employee" +
"WHERE rc_employee.login = ?");
}
}
Powyższe zapytania SQL (usersByUsernameQuery, authoritiesByUsernameQuery), sprawdziłem bezpośrednio w bazie danych (pracuję na Oraclu) i otrzymuję oczekiwane wyniki:
Po uruchomieniu aplikacji, podaniu w postmanie loginu USER1 i hasła pwd i wywołaniu GET na wspomnianym endpoincie w konsoli otrzymuję:
Do hasła użyłem bcrypt. Dodałem odpowiedniego beana w pliku uruchomieniowym:
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(6);
}
public static void main(String[] args) {
SpringApplication.run(RentcarApplication.class, args);
}
}
Nie mam pomysłu na to jak sprawdzić dlaczego nie otrzymuję dostępu do zasobu. Podpowiecie?
EDIT:
Dodam tylko że nawet ja celowo usunę jeden parametr z pierwszego zapytania SQL czyli:
.usersByUsernameQuery("SELECT e.login,e.password FROM rc_employee e WHERE e.login = ?")
Debuger nie zwraca błędu że metoda powinna przyjmować 3 elementy. Podejrzewam że zapytanie w ogóle się nie wykonuje....
- screenshot-20210102112554.png (28 KB) - ściągnięć: 5
- screenshot-20210102112716.png (32 KB) - ściągnięć: 6
- screenshot-20210102113426.png (63 KB) - ściągnięć: 5
- screenshot-20210102112957.png (15 KB) - ściągnięć: 7