РЕДАКТИРОВАТЬ:
После нескольких дней попыток различных изменений конфигурации безопасности, я наказал и положил .permitAll () на каждую конечную точку, которая должна авторизовать / аутентифицировать любой запрос. Но даже тогда, хотя я мог свободно «просматривать» любую страницу без проверки подлинности, клиенты моего устройства все еще не могли отправлять запросы PUT на обычную конечную точку приложения.
Итак, теперь возникает вопрос, почему удаленные клиенты могут успешно отправлять запросы PUT моему приложению, работающему в версии 1.5.4 Spring Boot, но не тогда, когда в Spring Boot 2.0.2 запущено «то же приложение»?
Я получаю успешный ответ «проверка работоспособности» («вверх и работает как обычно ... ") когда я попадаю на ту же конечную точку" устройства "с GET-запросом от моего браузера Но клиентские устройства просто получают ERR_CONNECTION_REFUSED (или подобное), когда они пытаются PUT.
/ EDIT
Этот вопрос связан с вопросом, который я задавал о миграции через Web Socket пару дней в go, но часть веб-сокета оказалась красной сельдью.
Реальная проблема, с которой я сталкиваюсь, связана с Spring Security в SB 2.0.2.
springBootVersion = '2.0.2.RELEASE'
springVersion = '5.0.13.RELEASE'
springSecurityVersion = '5.2.1.RELEASE'
Все работало так, как нам было нужно в SB 1.5.4, но в 2.0. 2 Я не могу восстановить необходимое поведение. Что мне нужно, так это мой пользовательский логин формы, применяемый ко всем конечным точкам, кроме / input и / input / auth
Это единственный адаптер конфигуратора, который мы использовали на 1.5.4 (с ACRESS OVERRIDE)
@Configuration
@EnableWebSecurity
//@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
@Order(1)// highest priority
class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
SimpleAuthenticationManager sam;
@Override
protected void configure(HttpSecurity http) throws Exception {
// false means go to original destination page after login success
boolean alwaysRedirectToSuccessUrl = false;
http.headers().cacheControl().disable();
http.headers().frameOptions().sameOrigin();
http.csrf().ignoringAntMatchers("/input/auth/**");// ignoring WebSocket endpoints (secured by other means)
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.ALWAYS);
http.authorizeRequests()
.antMatchers('/widgetInfo/**', '/stats', '/errorCodes').hasAuthority('USER').anyRequest().fullyAuthenticated()
http.formLogin()
.loginPage('/widgetInfo/login')
.loginProcessingUrl("/widgetInfo/fooInfo")
.defaultSuccessUrl("/widgetInfo/fooInfo", alwaysRedirectToSuccessUrl)
.failureUrl("/widgetInfo/login?status=LOGIN_FAILURE").permitAll()
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers('/webjars/**', '/static/**', '/css/**', '/js/**', '/input/**');
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.parentAuthenticationManager(sam)
}
}
Вышеуказанная конфигурация работает в 2.0.2, за исключением того, что она не разрешает свободный доступ к конечным точкам / input. После нескольких дней погони за красной сельдью и осознания моего недопонимания я попытался добавить еще один гораздо более мягкий адаптер для настройки, как более или менее описано в нижней части этой страницы
@Configuration
@EnableWebSecurity
@Order(11)// lowest priority
class LenientWebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().ignoringAntMatchers("/input/auth/**");// ignoring WebSocket endpoints (secured by other means)
http.authorizeRequests().antMatchers('/input', 'input/auth', '/input/**').permitAll()
}
}
Но это не работает, конечная точка / input еще не доступна для свободного доступа. В чем проблема?
Если я поменяю @Order, то через мою форму входа в систему ничего не пройдет.