Whitelabel错误页面只在URL上键入?

时间:2018-05-23 09:23:50

标签: spring angular spring-boot url angular-routing

Spring-boot 项目与 Angular 4 集成。输入网址时,我可以访问主页>> localhost:8080

我输入 whitelabel错误页面,当输入任何不同的url添加参数时,如: / login,/ signup

  

出现意外错误(type = Not Found,status = 404)。

我可以使用 angular-routing 在网站上访问这些网页(localhost:8080/signuplocalhost:8080/foo,..)。所以问题是只能直接击中网址。

那么如何解决这个问题,任何检查的想法都会有所帮助。

注意:服务器端没有这些网址的授权。

编辑:添加了index.html路径。

src/main/resources
  static
    assets
    index.html
    bundle
    bundle
    ..

routing.ts

export const routes: Routes = [
  {
    path: '',
    component: HomeComponent,
    pathMatch: 'full'
  },
  {
    path:'signup',
    component: SignupComponent,
    canActivate: [GuestGuard],
    pathMatch:'full'
  },

2 个答案:

答案 0 :(得分:1)

创建一个控制器并将每个请求转发到index.html,如下所示,

sendRequest(method: string, url: string, data: any) : Observable<any>{
    return this.http.request(method, url, {
        body: data,
        headers: {
            'Accept': 'application/json, text/plain, */*',
            'Authorization': 'bearer ' + token,
            'Content-Type': 'application/json;charset=UTF-8'
        }
    }).map( ( res ) => {
      return res || {};
    } )
    .catch( this.handleError );
}



handleError(response: any) {
    if (response.status === 401 || response.status === 403) {
        this.tokenService.deleteToken();
        this.router.navigate(['login']);
    }
    // Show popup etc.
    ...
}

通过执行此操作,angular将拾取URL并导航到相应的页面。另外,请根据需要修改请求网址。每当从浏览器直接命中一个请求时,它将通过弹簧启动来启动,并且弹簧启动不知道角度路由URL。为防止这种情况,我们需要将所有请求转发给index.html。

或者您可以使用HashLocationStrategy作为@Vikas建议

答案 1 :(得分:1)

我直接实现了这个WebMvcConfigurer,它对我来说很有效。这是参考link

import java.io.IOException;

import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

      registry.addResourceHandler("/**/*")
        .addResourceLocations("classpath:/static/")
        .resourceChain(true)
        .addResolver(new PathResourceResolver() {
            @Override
            protected Resource getResource(String resourcePath,
                Resource location) throws IOException {
                Resource requestedResource = location.createRelative(resourcePath);
                return requestedResource.exists() && requestedResource.isReadable() ? requestedResource
                : new ClassPathResource("/static/index.html");
            }
        });
    }
}