下面,我使用login.html作为在test.png
中添加图像/static/images/
的页面
因此,在login.html中,我有<img src="../static/images/test.png" width="1000" th:src="@{images/test.png}"/>
,该图像为空白图像。为什么没有显示?
在我的SecurityConfiguration.java
文件中,
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
//.antMatchers("/**").hasRole("ADMIN")
.antMatchers("/static").permitAll()
.and().formLogin()
.loginPage("/login")
.permitAll();
当我使用此配置时,它将使用默认的index.html页面,该页面可以很好地显示图像。但是,如果我取消注释.antMatchers("/**").hasRole("ADMIN")
,它将带我进入login.html,但无法查看图像。
答案 0 :(得分:2)
我可以发现3个问题。
.antMatchers("/static")
而不是.antMatchers("/images/**")
,因为src/main/resources/static
中的任何内容都将从应用程序的根目录提供(如here所述-请注意,文件夹“ public “和”静态”可与Spring Boot互换)。.authorizeRequests()
的匹配器顺序很重要!只是作为method's documentation的最后一个例子。您应该颠倒您的蚂蚁匹配器: .antMatchers("/images/**").permitAll() // more detailed paths should go first
.antMatchers("/**").hasRole("ADMIN") // more general paths should go last
th:src="@{/images/test.png}"
而不是th:src="@{images/test.png}"
。开头的斜杠使相对于应用程序根的路径与第一个建议相伴。如Thymeleaf's documentation中所述:以
/
开头的相对URL(例如:/order/details
)将自动以应用程序上下文名称作为前缀。