我第一次尝试使用Spring Boot而且我遇到了错误403,我无法弄清楚如何解决问题
我已经使用thymeleaf创建了一个管理页面:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>The Link Application</title>
<link rel="stylesheet" href="css/bootstrap.min.css"/>
</head>
<body>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
<span class="sr-only">Toggle Navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">
<img src="img/Company-logo-sm-header.png" />
</a>
</div>
</div>
</nav>
...
CSS完全加载并位于src/main/resources/static/css
,给出错误403的图片位于src/main/resources/static/img
这是我的Application
课程:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
我有一个MVC配置课程:
@Configuration
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
registry.addViewController("/").setViewName("home");
registry.addViewController("/hello").setViewName("hello");
registry.addViewController("/login").setViewName("login");
}
}
一个安全配置,我不确定我是否正确使用它,antMatchers(...).permitAll()
对我来说似乎应该允许图像:
@Configuration
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**", "/resources/**","/resources/public/**").permitAll()
.antMatchers("/", "/home", "/link").permitAll()
.antMatchers("/css/**", "/js/**", "/img/**", "**/favicon.ico").anonymous()
.antMatchers("/admin").hasRole("ADMIN")
.anyRequest().authenticated().and()
.formLogin().loginPage("/login").permitAll().and()
.logout().permitAll();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("admin").password("admin").roles("USER", "ADMIN").and()
.withUser("user").password("user").roles("USER");
}
}
我使用的是Spring Boot 1.3.3
我在/src/main/resources
中没有公共目录,我的所有静态内容都进入/src/main/resources/static
,css进入css子文件夹,js进入js子文件夹,它们都工作正常在执行<link rel="stylesheet" href="css/bootstrap.min.css"/>
或<script src="js/jquery-2.2.1.min.js"></script>
知道为什么我/src/main/resouces/static/img
中的图片给了我一个错误403而/src/main/resouces/static/css
中的CSS和/src/main/resouces/static/js
中的JS不是?
答案 0 :(得分:2)
我认为只是你的安全配置需要工作。
您不需要这条线,因为这就是静态资产的投放地点。它不是一条可以访问的路径。
.antMatchers("/public/**", "/resources/**","/resources/public/**").permitAll()
对于此行,请尝试将.anonymous()
更改为.permitAll()
,然后您就可以访问这些图片了。
.antMatchers("/css/**", "/js/**", "/img/**", "**/favicon.ico").anonymous()
答案 1 :(得分:0)
我想在above Patrick answer中添加一些内容,答案对我有帮助,但是我还有另一个错误。当我添加
.antMatchers("/assets/css/**", "/assets/js/**", "/assets/img/**", "**/favicon.ico").permitAll();
将{p}的错误代码更改为403
。因为我忘记添加
404
我从another source找到了这个。 我希望其他人不会重复我的错误。