java - Spring资源返回空白html页面

标签 java spring spring-boot docker thymeleaf

我无法在 thymeleaf 页面中加载资源(如 .css .js)。它们返回 200,但返回为空 html 文件。我在控制台中看到此错误

Uncaught SyntaxError: Unexpected token < bootstrap.min.js

因为正如我所说,它返回空白 html。如果我在浏览器(localhost/js/bootstrap.min.js)上打开此资源,我会得到此页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
</html>

Web安全配置

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers(
                    "/",
                    "/js/**",
                    "/css/**",
                    "/img/**",
                    "/charts/**",
                    "/images/**",
                    "/jquery.cookie/**",
                    "/fonts/**",
                    "/font-awesome/**",
                    "/bootstrap/**",
                    "/webjars/**").permitAll()
            .antMatchers("/dashboard/**").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
            .logout()
            .invalidateHttpSession(true)
            .clearAuthentication(true)
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/login?logout")
            .permitAll()
            .and()
            .exceptionHandling()
            .accessDeniedHandler(accessDeniedHandler);

docker-compose

    nginx:
    container_name: some-nginx
    image: nginx:1.13
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
    depends_on:
      - app
    networks:
      - postgres-compose-network

  postgresql:
    container_name: psql_db
    image: postgres:11.4
    volumes:
      - psql_db:/var/lib/postgresql/data
    environment:
      - POSTGRES_PASSWORD=passwd
      - POSTGRES_USER=commegram_user
      - POSTGRES_DB=commegram_db
      - PGDATA=/var/lib/postgresql/data
    ports:
      - "15432:5432"
    networks:
      - postgres-compose-network
  app:
    restart: always
    build: .
    working_dir: /app
    volumes:
      - ./:/app
    expose:
      - "8080"
      - "8081"
    command: mvn clean spring-boot:run
    depends_on:
      - postgresql
    networks:
      - postgres-compose-network


volumes:
  psql_db: {}

networks:
  postgres-compose-network:
    driver: bridge

资源树

 src/main/resources/
├── application.properties
├── static
│   ├── bootstrap
│   │   ├── bootstrap.min.css
│   │   └── bootstrap.min.js
│   ├── charts
│   │   └── Chart.min.js
│   ├── css
│   │   ├── custom.css
│   │   ├── custom.min.css
│   │   ├── font.css
│   │   ├── main.css
│   │   └── style.default.css
│   ├── font-awesome
│   │   ├── font-awesome.min.css
│   │   └── fonts
│   │       ├── FontAwesome.otf
│   │       ├── fontawesome-webfont.eot
│   │       ├── fontawesome-webfont.svg
│   │       ├── fontawesome-webfont.ttf
│   │       ├── fontawesome-webfont.woff
│   │       └── fontawesome-webfont.woff2
│   ├── fonts
│   │   ├── dark-dashboard.eot
│   │   ├── dark-dashboard.svg
│   │   ├── dark-dashboard.ttf
│   │   ├── dark-dashboard.woff
│   │   ├── fontawesome-webfont.ttf
│   │   ├── fontawesome-webfont.woff
│   │   └── fontawesome-webfont.woff2
│   ├── images
│   │   ├── american-express.png
│   │   ├── cropper.jpg
│   │   ├── img.jpg
│   │   ├── inbox.png
│   │   ├── mastercard.png
│   │   ├── media.jpg
│   │   ├── paypal.png
│   │   ├── picture.jpg
│   │   ├── prod-1.jpg
│   │   ├── prod-2.jpg
│   │   ├── prod-3.jpg
│   │   ├── prod-4.jpg
│   │   ├── prod-5.jpg
│   │   ├── user.png
│   │   └── visa.png
│   ├── img
│   │   ├── avatar-6.jpg
│   │   └── favicon.ico
│   ├── jquery.cookie
│   │   └── jquery.cookie.js
│   └── js
│       ├── charts-home.js
│       ├── custom.js
│       ├── custom.min.js
│       └── front.js
├── templates
│   ├── dashboard.html
│   ├── fragments
│   │   ├── fragment-footer-content.html
│   │   ├── fragment-menu-footer-buttons.html
│   │   ├── fragment-menu-profile-quick-info.html
│   │   ├── fragment-sidebar-menu.html
│   │   ├── fragment-top-navigation.html
│   │   └── layout.html
│   ├── index.html
│   ├── login-default.html
│   ├── login.html
│   └── registration.html
└── validation.properties

最佳答案

我认为你的问题是

.antMatchers(
                    "/",
                    "/js/**",
                    "/css/**",
                    "/img/**",
                    "/charts/**",
                    "/images/**",
                    "/jquery.cookie/**",
                    "/fonts/**",
                    "/font-awesome/**",
                    "/bootstrap/**",
                    "/webjars/**").permitAll()

请删除此代码并添加一个额外的方法void configure(WebSecurity web),如下所示

@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
                .antMatchers(
                    "/js/**",
                    "/css/**",
                    "/img/**",
                    "/charts/**",
                    "/images/**",
                    "/jquery.cookie/**",
                    "/fonts/**",
                    "/font-awesome/**",
                    "/bootstrap/**",
                    "/webjars/**"
                 );
    }

希望它能解决您的问题...

关于java - Spring资源返回空白html页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57261785/

相关文章:

java - 我怎样才能获得我的应用程序的可见窗口数?

java - org.hibernate.service.UnknownServiceException : Unknown service requested [org. hibernate.ogm.service.impl.OgmConfigurationService]

spring - 如何在 Web 应用程序运行时保留用于解密的 key

java - 使用 thymeleaf 将整数中的分值转换为 HTML 中的货币

mysql - 使用 JPA 创建表

java - Spring @RestController 无法返回 unicode

java - java构造函数中的简单错误

java - Quick Spring MVC 问题 : If I don't return a model, 为什么我仍然可以通过响应呈现 View ?

java - 如何在不运行整个作业的情况下测试 Spring Batch 步骤

rest - Spring Boot REST - 公开与安全和不安全相同的服务