Ustawienie spring security by wymagał tokena JWT dla konkretnego endpointa

0

Siema
W mojej aplikacji mam autoryzację poprzez JWT - gdy user poda poprawny login i hasło to dostaje w odpowiedzi token JWT, który jest tam aktywny przez ileś czasu

Potem chciałbym aby poprzez ten token mógł uzyskać dostęp do swoich zasobów (informacji), które są wystawione poprzez endpoint "users/id"

Mam taką metodę konfiguracji

@EnableWebSecurity
	@Configuration
	class WebSecurityConfig extends WebSecurityConfigurerAdapter {
		@Override
		protected void configure(HttpSecurity http) throws Exception {
			http.antMatcher("/users/{\\d+}")
					.authorizeRequests()
					.anyRequest().authenticated()
					.and()
					.addFilterAfter(jwtFilter(), UsernamePasswordAuthenticationFilter.class);
		}
	}

Dla zapytań typu GET działa dobrze (gdy jest wysyłany poprawny token, to zwraca dobrą odpowiedź, jak wysyłamy token innego usera albo błędy to zwraca poprawnie "Access Denied"

Chciałbym to rozszerzyć tak, aby user mógł sobie PATCH'a strzelić (wysyłąc tak samo token jak przy GET) i podmienić jakąś swoją daną, ale taka konfiguracja jaką mam sprawia że zawsze jest zwracane "Forbidden"
Jak przerobić tę metodę powyżej?

0

Nie jestem pewien czy do końca rozumiesz co robisz, bo ten antMatcher sprawia że cała konfiguracja odnosi się tylko do podanych ścieżek, ale w ramach tego nie zrobiłeś żadnego matcha na faktyczną ścieżkę requestu. Normalnie miałbyś raczej coś w stylu:

           http
                    .authorizeRequests(authorizeRequests -> authorizeRequests
                            .antMatchers("/users/**")
                            .authenticated()
                    );

Co więcej, można wtedy bez problemu określić matchowanie requestu na konkretne metody, np.

.antMatchers(HttpMethod.GET,"/users/**")

Niemniej domyślnie powinno ci zmatchować wszystko, w tym tego PATCHa. Jesteś pewien ze błąd jest tutaj a nie w kontrolerze? Włącz debug logi na spring security i zobacz dokładnie co się tam dzieje i skąd ten forbidden.

1 użytkowników online, w tym zalogowanych: 0, gości: 1