Spring Boot 2.0.2 Spring Security как отключить пользовательский вход в форму для двух конечных точек - PullRequest
0 голосов
/ 08 января 2020

РЕДАКТИРОВАТЬ:

После нескольких дней попыток различных изменений конфигурации безопасности, я наказал и положил .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, то через мою форму входа в систему ничего не пройдет.

1 Ответ

0 голосов
/ 13 января 2020

Ответ здесь только для того, чтобы закрыть l oop для будущих пользователей, которые могут попасть сюда.

Проблема оказалась в том, что Spring Boot 1.5.4 будет принимать запросы «HTTP1.1», но Spring Boot 2.0.2 не будет.

Наше приложение находится за устройством F5, которое отклоняет входящие запросы, если / когда запросы приложения «проверка работоспособности» не выполняются. Это запрос проверки работоспособности, который работал на 1.5.4

GET /myGateway/input HTTP/1.1\r\n

, но на 2.0.2 этот запрос не удался. На 2.0.2 запрос на проверку работоспособности должен быть

GET /myGateway/input \r\n

. Поэтому проблемы с конфигурацией «Spring Security» также представляли собой красную сельдь.

РЕДАКТИРОВАТЬ: По-видимому, это / было известная проблема с 2.0.x, исправленная в Spring Boot 2.2.x (лето 2019 г.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...