Spring Boot 2 OAuth2不提供静态内容

时间:2018-10-26 05:06:27

标签: spring angular spring-boot spring-security-oauth2

我创建了两个应用程序,即App-Server和App-Client。

App Server是Spring Boot 2和Spring Security OAuth2。

App-Client是Angular JS 6。

当我分别运行两个应用程序时,它们都工作正常,但是当我尝试使用App-Server提供静态内容(应用程序客户端)时,则无法正常工作。

我正在使用以下代码将静态文件添加到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();
    }

}

每当我尝试访问任何静态文件时,我都没有任何回复。

但是在本地,我可以看到

  

在以下位置未找到带有URI [/api/index.html]的HTTP请求的映射:   名称为“ dispatcherServlet”的DispatcherServlet

...

1 个答案:

答案 0 :(得分:0)

我所做的更改很少,首先,我(通过解压缩)检出jar,发现没有可用于“静态内容”的文件。

经过几次试用和运行,我发现在pom.xml中,我需要正确映射来自应用程序客户端的ui内容。我做了以下事情。

<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>使其与目录结构匹配。

希望这对某人有所帮助。