Spring boot 2 oauth2 не обслуживает статический контент

Я создал два приложения: App-Server и App-Client.

Сервер приложений - это Spring Boot 2 и Spring Security OAuth2.

App-Client - это Angular JS 6.

Когда я запускаю оба приложения по отдельности, они работают нормально, но когда я пытался использовать App-Server для обслуживания статического контента (приложение-клиент), он не работал.

Я использую приведенный ниже код для добавления статических файлов на сервер приложений.

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
        <plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                  <execution>
                      <id>copy-resources</id>
                      <phase>validate</phase>
                      <goals><goal>copy-resources</goal></goals>
                      <configuration>
                          <outputDirectory>${basedir}/target/classes/static/</outputDirectory>
                          <resources>
                              <resource>
                                  <directory>${basedir}/../app-client/dist/app-client</directory >
                              </resource>
                          </resources>
                      </configuration>
                  </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Моя веб-безопасность выглядит так

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
    @Order(Ordered.HIGHEST_PRECEDENCE)
    protected void configure(HttpSecurity http) throws Exception {
        http
        .sessionManagement()
        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
        .csrf().disable()
        .authorizeRequests()
        .antMatchers("/about","/signup","/oauth/token","/users/otp").permitAll()
        .anyRequest().authenticated()
        .and().logout().logoutSuccessUrl("/").permitAll()
        .and()
        .httpBasic()
            .realmName(REALM);
    }
//Some other code .....
}

Любой мой ResourceServerConfig выглядит так, как показано ниже

    @Configuration
    @EnableResourceServer
    public class ResourceServerConfig extends ResourceServerConfigurerAdapter

 {

    @Autowired
    private TokenStore tokenStore;

    @Override
    public void configure(ResourceServerSecurityConfigurer resources)throws Exception{
        resources.resourceId("app-server-api").tokenStore(tokenStore);
    }

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers("/","/users/otp", "/index.html","/resources/**","/images/**")
        .permitAll()
        .antMatchers("/v1/**")
        .authenticated();
    }

}

Когда я когда-либо пытался попасть в какой-либо статический файл, я не получал ответа.

Однако в местных я вижу

No mapping found for HTTP request with URI [/api/index.html] in DispatcherServlet with name 'dispatcherServlet'

...

есть масса статей о том, как это сделать. просто попробуйте несколько из них. Я подозреваю, что вы идете неправильным путем. stackoverflow.com/questions/24916894/…stackoverflow.com/questions/49537382/…

Nikhil 05.11.2018 09:37

Решение говорит о том, как обслуживать статический контент с нормальной безопасностью Spring, что мне нужно, это Spring Security OAuth2.

S Atah Ahmed Khan 05.11.2018 09:56

это одно и то же.

Nikhil 05.11.2018 11:15
0
3
427
1

Ответы 1

Есть несколько изменений, которые я сделал. Во-первых, я проверил банку (распаковав) и обнаружил, что для статического содержимого нет файлов.

После нескольких проб и запуска я обнаружил, что в pom.xml мне нужно правильно сопоставить содержимое пользовательского интерфейса из приложения-клиента. Я сделал следующее.

<plugin>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
                  <execution>
                      <id>copy-resources</id>
                      <phase>validate</phase>
                      <goals><goal>copy-resources</goal></goals>
                      <configuration>
                          <outputDirectory>${basedir}/target/classes/static/</outputDirectory>
                          <resources>
                              <resource>
                                  <directory>${basedir}/../app-client/dist</directory >
                              </resource>
                          </resources>
                      </configuration>
                  </execution>
            </executions>
        </plugin>

Обратите внимание, что нам нужно использовать .. под тегом <directory>, чтобы он соответствовал структуре каталогов.

Надеюсь, это кому-то поможет.

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