java - 在启用安全性的 Spring 5 中加载静态资源时出现问题

标签 java spring-boot spring-security thymeleaf

我在 spring 5 中加载图像、CSS 样式等静态资源时遇到问题 当我添加安全性时,没有安全性它加载正常

我就是这样做的。

首先,我在 Eclipse Photon 中使用 Spring Starter Project 创建一个项目

Spring Boot版本:2.2.6

添加一些依赖项:

Spring 网页

thymeleaf

Spring 安全

Spring Boot 开发工具

Spring 启动执行器

运行项目,我使用生成的安全密码,一切正常。

现在我添加静态资源

所以我创建一个名为/assets/imgs 的文件夹

在 src/main/resources/static/

我在该文件夹中添加了一个要使用的假图像,名为 fake-image.png

我创建一个类,其中包含用户和密码以及允许我的资源的模式。

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
        .authorizeRequests().antMatchers("/resources/**", "/static/**","/src/main/resources/**").permitAll().and()
        .formLogin().loginPage("/login").permitAll()
        .usernameParameter("username").passwordParameter("password")
        .defaultSuccessUrl("/loginsuccess").permitAll().and()
        .logout().permitAll();
    }

    @Bean
    public BCryptPasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder builder) throws Exception {

        PasswordEncoder encoder = passwordEncoder();
        UserBuilder users = User.builder().passwordEncoder(encoder::encode);

        //User to login
        builder.inMemoryAuthentication()
                .withUser(users.username("admin").password("q").roles("ADMIN"));

    }

}

我创建一个类来添加我的登录表单

@EnableWebMvc
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/").setViewName("login");
    }

}

最后我添加一个像这样的login.html页面,以显示一个简单的图像

<!DOCTYPE html>
<html lang="es" xmlns="http://www.w3.org/1999/xhtml"
    xmlns:th="http://www.thymeleaf.org">
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

<meta name="viewport"
    content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<meta name="description" content="" />
<meta name="author" content="" />

<meta name="ctx" th:content="@{/}" />

<title>Test Static Files</title>

</head>
<body>
    <div class="container">
        <div class="row no-gutters mt-3">
            <div class="col columna-banner">
                <img class="img-fluid rounded login-banner-image"
                    th:src="@{/assets/imgs/fake-image.png}" />
            </div>
        </div>
    </div>
</body>
</html>

在 Eclipse 控制台中,我收到此警告消息:

警告 1434 --- [nio-8080-exec-2] o.s.web.servlet.PageNotFound:没有 GET/assets/imgs/fake-image.png 的映射

更新1:

已将代码添加到 github:

https://github.com/davisoski/stackoverflow-static-files

我错过了什么吗?

有什么建议吗?

谢谢

最佳答案

您似乎忘记添加这样的内容

    @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**")
        .addResourceLocations("classpath:/static/")
        .setCachePeriod(31556926);
}

进入您的 WebConfig 类

关于java - 在启用安全性的 Spring 5 中加载静态资源时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60916962/

相关文章:

java - 如何以 Media Recorder 不支持的格式进行编码?

java - 如何在 BroadcastReceiver 中访问 MainActivity 的对象或方法?

java - Jakson 多态枚举案例

jquery - 客户端发送的请求在语法上不正确

Spring Security 用户账号注册、创建和管理

java - Tomcat 服务器上的 SSL 证书

java - 由于 android 中的空指针异常,我无法获取数据

Spring-boot JPA 多个数据源不更新或创建表

java - 具有相同值的字符串文字不会在 Controller 中保留同步锁

java - 如何处理 UsernameNotFoundException spring security