当前位置: 首页 > 知识库问答 >
问题:

如何在springboot服务器中托管角度构建文件?

终子昂
2023-03-14

我有一个类似于以下内容的Spring启动配置文件,

server:
  port: 8002
  servlet:
    context-path: /api/
...

spring:
  mvc:
    static-path-pattern: "/resources/**"
...

我已将角度项目中的构建文件复制粘贴到resources/resources/static中。

不知道这有没有关系。下面是我的< code>JwtFilter.java,

@Component
public class JwtFilter extends OncePerRequestFilter {

    final private JwtUtil jwtUtil;

    @Autowired
    JwtFilter(JwtUtil jwtUtil) {
        this.jwtUtil = jwtUtil;
    }

    @Override
    protected void doFilterInternal(
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse,
      FilterChain filterChain
    ) throws ServletException, IOException {
        Cookie[] cookies = httpServletRequest.getCookies();
        if(cookies == null) {
            cookies = new Cookie[]{};
        }
        Cookie jwtCookie = Arrays.stream(cookies)
          .filter(cookie -> cookie.getName().equals(StringConstants.JWT_AT_COOKIE_NAME))
          .findFirst()
          .orElse(null);

        Cookie rtCookie = Arrays.stream(cookies)
          .filter(cookie -> cookie.getName().equals(StringConstants.RT_COOKIE_NAME))
          .findFirst()
          .orElse(null);

        if (rtCookie == null) {
            httpServletResponse.sendError(401, "REFRESH_TOKEN_NOT_FOUND");
            return;
        }

        String jwt = null;
        String uid = null;

        try {
            if (jwtCookie != null) {
                jwt = jwtCookie.getValue();
                uid = jwtUtil.extractSubject(jwt);
            } else {
                httpServletResponse.sendError(401, "User not authenticated!");
            }

            if (uid != null) {
                if (!jwtUtil.validateToken(jwt)) {
                    httpServletResponse.sendError(401, "EXPIRED_JWT_TOKEN_EXCEPTION");
                    return;
                }
            }
        } catch (SignatureException exception) {
            httpServletResponse.sendError(403, exception.getMessage());
            return;
        }
        filterChain.doFilter(httpServletRequest, httpServletResponse);
    }

    @Override
    protected boolean shouldNotFilter(HttpServletRequest request) {
        String path = request.getRequestURI();
        return path.equals("/api/auth") || path.equals("/api/auth/");
    }
}

我尝试过将这些js构建文件添加到元INF /资源,公共

目录结构为:

    < li>java/... < li >资源/ < ul > < li >资源/ < ul > < li >元信息/ < ul > < li >资源/[包含角度构建文件]

现在,如果我转到http://localhost:8002/然后它只显示HTTP状态404–未找到

共有1个答案

隆选
2023-03-14

项目结构需要做更多的工作。

在这里查看问题。

在一个罐子中使用Spring boot 2.x构建angular 11

删除此。

spring:
  mvc:
    static-path-pattern: "/resources/**"

您想将npm build工件放在src/main/Resources/静态中。

首先,< code>npm run build,您将在< code>dist/中找到工件。

dist/中的任何内容复制到src/main/resources/static/中。例如,<code>dist/index。html将被复制并粘贴到src/main/resources/static/index.html中。

然而,这里有一个问题。如果您介意url中的散列片段< code>#/foo/bar,您需要告诉Springboot在404上提供< code>index.html。

@SpringBootApplication
public class BlogApiApplication {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(BlogApiApplication.class);
        app.run(args);
    }


    @Bean
    public EmbeddedServletContainerCustomizer containerCustomizer() {

        return new EmbeddedServletContainerCustomizer() {
            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {

                ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");

                container.addErrorPages(error404Page);
            }
        };
    }
}

通过这种方式,您不需要哈希模式。React也一样,Vue。

参考

 类似资料:
  • 我需要一些上传图像的帮助。 我有两个不同的申请 在我的专用服务器上运行的Springstart应用程序 Angulal-6 Application-在我的云服务器上运行 我需要从我的spring boot应用程序上传一个图像到Angular-6资产文件夹(资产文件夹类似于spring boot应用程序的资源文件夹) 在application.properties我已经声明上传位置,如profile

  • 问题内容: 我在我的角度应用程序中创建了工厂/服务。 我想在浏览器中调试它。有没有一种方法可以访问其实例并检查其函数和变量的值是什么? 角度范围可以使用 是否有类似的方式访问工厂? 问题答案: 我相信您可以使用以下方式: 并且由于angularjs服务是 单例的 ,因此在任何 angular.element 上执行此操作都将始终返回相同的服务实例/对象。

  • 我按照此页面在我的服务器(ngrok 1.7)上自托管ngrok https://www.svenbit.com/2014/09/run-ngrok-on-your-own-server/ ATM,我可以正常使用超文本传输协议。 但是,我也想使用ssh(tcp协议)。 当尝试使用以下命令 ngrok (Ctrl C退出) 隧道在线状态 版本1.7/1.7 转发tcp://tunnel.mydoma

  • 问题内容: 这是一个简单的node.js代码。 我将其上传到cpanel托管服务器上并安装了node.js并运行它。如果服务器是普通服务器,我可以通过访问’http:// {serverip}:8080’检查脚本结果。但是在cpanel上托管域和子域,并且每个域都由每个站点匹配。甚至http:// {serverip}也不是有效的网址。如何访问我的node.js结果?请教我。谢谢。bingbing

  • 为什么我不能多次打这个电话? 在下面第二次使用时崩溃....和不回收有关吗?

  • 这是一组问题,而不是一个非常具体的问题。在过去的几周/几天里,我对如何在“云中”正确地托管JAVA PLAY应用程序的信息感到困惑,因为很多信息分散在不同的服务上,我想把所有这些小部分集中在一起,因为很多事情都很重要,需要在完整的上下文中看到。然而,我把我的考虑转移到了问题的底部,因为它们主要是我的观点和主观发现,我不想对此负责。如果我做错了什么,请毫不犹豫地指出。 我们的场景:我们在Java P