Я вошел с правильными учетными данными как "РЕБЕНОК", поэтому он отличается от роли "ПОЛЬЗОВАТЕЛЬ". Когда я отправляю запрос на получение с токеном http://localhost: 8081 / iam / account / users , он мне не разрешается, и это нормально.
Но когда я отправляю запрос на http://localhost: 8081 / iam / account / users / (примечание sla sh добавляется в конец URL), я получаю разрешение чтобы попасть по этой ссылке и вернуть тело мне дано. Но я не должен быть авторизован для его получения.
Мой метод настройки. Похоже, работает, я просто не понимаю, почему "/ iam / account / users *" не совпадает также с URL с добавленным sla sh в конце?!
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry expressionInterceptUrlRegistry = http.cors() //
.and() //
.csrf().disable() //
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) //
.and() //
.authorizeRequests();
expressionInterceptUrlRegistry = expressionInterceptUrlRegistry.antMatchers("/iam/accounts/users*").hasRole("USER");
expressionInterceptUrlRegistry = expressionInterceptUrlRegistry.antMatchers("/iam/accounts/childs*").hasRole("CHILD");
expressionInterceptUrlRegistry.anyRequest().permitAll();
}
Rest controller
@RestController
@RequestMapping(path = "/iam/accounts", produces = MediaType.APPLICATION_JSON_VALUE)
@Validated
public class AccountController {
@GetMapping(path = "/users")
public String promoters() {
return "Logged as user";
}
@GetMapping(path = "/childs")
public String supervisors() {
return "Logged as child";
}
}
Я могу это исправить, если я добавлю 2 строки вместо одной, но почему этот antMatcher не делает этого, если звездочка * означает, что может следовать любое количество символов?
expressionInterceptUrlRegistry = expressionInterceptUrlRegistry.antMatchers("/iam/accounts/users").hasRole("USER");
expressionInterceptUrlRegistry = expressionInterceptUrlRegistry.antMatchers("/iam/accounts/users/*").hasRole("USER");