Я настраиваю Spring безопасности в проекте и столкнулся со странной проблемой.
Вот код для конфигурации:
http.authorizeRequests()
.antMatchers("/assets/**").permitAll()
.antMatchers("/login").anonymous()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/manager/**").hasRole("MANAGER")
.antMatchers("/").access("hasRole('admin') or hasRole('manager')")
.anyRequest().denyAll()
.and()
.formLogin()
.loginPage("/login")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.and()
.csrf().disable();
Проблема в том, что часть .anyRequest().denyAll()
заканчиваетсякак первый элемент в списке в DefaultFilterInvocationSecurityMetadataSource.requestMap
и все запросы отклоняются.Если я изменю его на .anyRequest().permitAll()
, все запросы будут разрешены.Если я пропущу .anyRequest()
, по умолчанию добавляется значение по умолчанию с authenticated()
.
Как заставить бит .anyRequest()
работать в правильном порядке?
^^ См. denyAll()
, добавленный к началусписок.
^^ Если я удаляю бит .anyRequest().denyAll()
, вместо него добавляется бит по умолчанию.