Spring Boot 2 OAuth2 не обслуживает статический контент - PullRequest
0 голосов
/ 26 октября 2018

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

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

Приложение-клиент Angular JS 6.

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

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

My Web Security выглядит как

@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();
    }

}

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

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

Не найдено сопоставление для HTTP-запроса с URI [/api/index.html] в ДиспетчерСервлет с именем «ДиспетчерСервлет»

...

1 Ответ

0 голосов
/ 14 ноября 2018

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

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

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

...