Добавить .antMatchers("/my-app/login").permitAll()
ДО .antMatchers("/my-app/**")...
. Сопровождающие запросы хранятся в списке (упорядочены по порядку, в котором они определены), а Spring Security будет использовать первое правило, которое соответствует совпадению с текущим запросом. Поэтому сначала ставьте наиболее конкретные и общие правила.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/my-app/login").permitAll()
.antMatchers("/my-app/**").access("hasRole('USER')")
.and()
.httpBasic()
.authenticationEntryPoint(entryPoint());
}
Если my-app
это имя вашего приложения, и, следовательно, URL, что на сервере приложений (Tomcat) к карте URL-адрес для приложения, то вы должны ommit его в antMatcher
потому что antMatcher
сконфигурирован "только" относительная URL приложения: /my-app/login
стать /login
и /my-app/**
стать /**
добавить
.anyRequest().permitAll()
, как последний "Искателя" из
authorizeRequests()
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/my-app/**").access("hasRole('USER')")
.anyRequest().permitAll()
.and()
.httpBasic()
.authenticationEntryPoint(entryPoint());
}
Но если честно: вы используете какой-либо черный список (разрешите все URL-адреса, за исключением некоторых черных) - и это не рекомендуется (с определенной точки зрения безопасности). Потому что, если вы забыли добавить или пропустить один URL-адрес, который должен быть защищен, он доступен для каждого органа. Более безопасный способ - отказать каждому URL-адресу и разрешить только некоторые (белый список).
Не было бы приятно просто добавить .И(). AuthorizeRequests(). AntMatchers ("/ мой-приложение/Логин"). PermitAll()»для входа в систему и добавить denyAll() в конце ? –
@amant: вы правы, я неправильно понял вопрос. Поэтому я изменил ответ. – Ralph