0

I have created two application, App-Server and App-Client.

App Server is Spring Boot 2 and Spring Security OAuth2.

App-Client is Angular JS 6.

When i am running both app separately they are working fine, but when i tried to use App-Server to serve static content (app-client), it's not working.

I am using below code to add static files into 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 look like

@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 .....
}

Any my ResourceServerConfig look like below

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

}

When ever i tried to hit any static file i didn't any response back.

However in the local, i can see

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

...

dur
  • 15,689
  • 25
  • 79
  • 125
S Atah Ahmed Khan
  • 1,313
  • 3
  • 14
  • 22
  • there are tons of article on how to . just try out few of these. I suspect you not following the right ways. https://stackoverflow.com/questions/24916894/serving-static-web-resources-in-spring-boot-spring-security-application https://stackoverflow.com/questions/49537382/serving-static-resources-in-spring-security-allow-access-to-all-files-in-res – Nikhil Nov 05 '18 at 08:37
  • The solution talk about how to serve static content with normal spring security, what i want is with Spring Security OAuth2. – S Atah Ahmed Khan Nov 05 '18 at 08:56
  • it is one and the same thing. – Nikhil Nov 05 '18 at 10:15

1 Answers1

0

There are few changes which i did, firstly, i checkout the jar(by unjaring) and found that there are no files available for Static Content.

After couple of trial and run, i found that in pom.xml, i need to map the ui content from app-client properly. I did the following.

<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>

Please note that we need to use .. under <directory> tag to match it with the directory structure.

Hope this help someone.

S Atah Ahmed Khan
  • 1,313
  • 3
  • 14
  • 22