首页 > 解决方案 > Spring Boot 2 - 本地 css 文件未用于索引页面

问题描述

我有一个 Spring Boot 2 应用程序。

css 文件存储在 resources/static/css 下。这些文件在索引中引用,在控制器中映射。

但是当最初加载索引时,我的 css 文件中没有 css 格式。检查元素显示为空。此时我还没有登录并收到 Oauth2 令牌。

登录后,我转到另一个页面,应用 css 格式。并返回索引显示格式化。

html中的代码示例是

<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
    <link href = "css/navigation.css" rel = "stylesheet"/>
    <link href = "css/demo.css" rel = "stylesheet"/>
</head>

只是补充一下,在我的安全配置中,我有

  http
     .authorizeRequests()
     .antMatchers("/**").hasRole("user")
     .antMatchers("/", "/login**", "/unpkg.com/**", "/cdn.jsdelivr.net","/error**","/*.js","/css/**")
     .permitAll()
     .anyRequest()
     .authenticated()
     .and()
     .csrf()
     .csrfTokenRepository(new CookieCsrfTokenRepository())
     .ignoringAntMatchers("/api/**");

所以猜测这是一个安全问题,但上面看起来是正确的。虽然我猜不是...

标签: htmlcssspring-security

解决方案


答案是 antMatchers 的顺序。

  http
     .authorizeRequests()
     .antMatchers("/", "/login**", "/unpkg.com/**", "/cdn.jsdelivr.net","/error**","/*.js","/css/**")
     .permitAll()
     .antMatchers("/**").hasRole("user")
     .anyRequest()
     .authenticated()
     .and()
     .csrf()
     .csrfTokenRepository(new CookieCsrfTokenRepository())
     .ignoringAntMatchers("/api/**");

推荐阅读