Spring Boot обслуживает статический контент, заблокированный системой безопасности

Я запустил приложение Spring Boot + Angular и сейчас хочу развернуть все это как jar. Итак, я создал конфигурацию maven, в которой создается приложение angular, а затем копируется в / target / classes / resources.

Но каждый запрос на root (localhost: 8080) блокируется безопасностью. Когда я отключаю его, я вижу страницу, что означает, что все развернуто правильно, но почему-то Spring не позволяет мне это видеть. Вот моя простая конфигурация безопасности, я хочу, чтобы статические ресурсы были незащищены, в то время как любой другой запрос требует аутентификации:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
                .anyRequest().authenticated()
                .and().httpBasic();
    }
}

Обновлено: Вот минимальный пример моей проблемы: https://gitlab.com/jnowacki/security-issue-demo

Обновлено еще раз: Я пробую все из этого поста: Обслуживание статических веб-ресурсов в приложении Spring Boot & Spring Security Я делаю что-то не так на концептуальном уровне? Неправильно ли обслуживать статический контент вместе с приложением Spring Boot?

@dur я добавил ссылку на репо с минимальным примером. Мне нужно обслуживать индекс без аутентификации и любой другой запрос после аутентификации. Я знаю, что могу разрешить все, а затем защитить только какой-то путь, например, / api, но дело не в этом.

KKeff 04.12.2018 22:55

Ваш вопрос непонятен. Если вы хотите разрешить все URL-адреса /, вам необходимо добавить этот URL-адрес в свою конфигурацию.

dur 08.12.2018 17:43

@dur, когда я настраиваю его следующим образом: http.authorizeRequests() .antMatchers("/").permitAll() .requestMatchers(PathRequest.toStaticResources().atCommonLoc‌​ations()).permitAll(‌​) .anyRequest().authenticated() .and().httpBasic(); index.html разрешен, но запрос css запрашивает учетные данные.

KKeff 10.12.2018 10:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
4 707
6

Ответы 6

попробуйте ниже.

@Override
public void configure(WebSecurity web) throws Exception {
    web
    .ignoring()
    .antMatchers("/resources/**");
}

Обратитесь к весна-безопасность-муравейник

Добавьте это дополнительное переопределение:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring()
            .antMatchers(AUTH_WHITELIST);
}

где AUTH_WHITELIST будет содержать игнорируемые пути. Например:

private static final String[] SWAGGER_AUTH_WHITELIST = {
        // -- swagger ui
        "/v2/api-docs",
        "/swagger-resources",
        "/swagger-resources/**",
        "/swagger-ui.html",
        "/resources/**"
};

Можете быть более конкретными? В примечаниях к выпуску 2.1 ничего подобного нет: github.com/spring-projects/spring-boot/wiki/…

NiVeR 04.12.2018 16:47

Я добавил ссылку на минимальный пример, я не думаю, что он специфичен для 2.1, просто у меня есть эта версия, и она там не работает.

KKeff 04.12.2018 22:57

Используйте этот метод, чтобы разрешить статические ресурсы игнорировать Spring Security

//this method allows static resources to be neglected by spring security
    @Override
    public void configure(WebSecurity web) throws Exception {
        web
            .ignoring()
            .antMatchers("/resources/**", "/static/**");
    }

Согласно StaticResourceLocationдокументы:

.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()

разрешит доступ к CSS, JS, ICO, изображениям и НЕ в HTML.

Чтобы разрешить index.html, вы можете использовать следующую конфигурацию:

 http.authorizeRequests()
                .antMatchers("/index.html", "/").permitAll()
                .anyRequest().authenticated()
                .and().httpBasic();

// расширяет WebSecrityConfiguratesAdapeter

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Overide
    public void configure(WebSecurity web) throws Exception { 
         web.ignoring()
            .antMatchers(HttpMethod.OPTIONS, ALL_ESCAPE)
            .antMatchers("*.js")
            .antMatchers(")
            .antMatchers(BOWER_COMPONENTS)
            .antMatchers(I18N)
            .antMatchers(CONTENT);           
      }
}

вы должны соответствовать реальному пути или примеру:

.pathMatchers("/assets/**", "/static/**")
            .permitAll()ere

Другие вопросы по теме