Spring安全静态资源请求HTTP代码302
Spring Security static resource request HTTP code 302
在我的 Spring 引导 Web 应用程序中,我配置了 Spring 安全性以允许像这样访问静态资源
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
// all requests must be authenticated
.anyRequest().authenticated()
// allow access to static resources
.antMatchers("/css/**", "/images/**", "/js/**", "/webjars/**").permitAll()
.and()
// login form authentication entry point
.formLogin()
.permitAll()
.loginPage("/login")
.usernameParameter("userId")
.and()
// allow unrestricted access to the logout action
.logout()
.logoutUrl("/logout")
.permitAll();
}
在我的登录 jsp 页面中,我包括 jquery 这样的
<script src="webjars/jquery/3.2.0/jquery.min.js"></script>
我在我的 pom 中这样声明 webjar
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.2.0</version>
</dependency>
但是生成的对资源@http://localhost:8080/webjars/jquery/3.2.0/jquery.min.js
returns的GET请求状态码为302且脚本未加载。我试过在请求中包含一个前导正斜杠,但结果相同。
匹配器的顺序很重要,请参阅Spring doc:
There are multiple children to the http.authorizeRequests() method
each matcher is considered in the order they were declared.
所以 anyRequest()
匹配器必须在 antMatchers()
之后。这是 Spring 文档中的示例:
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/resources/**", "/signup", "/about").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
.anyRequest().authenticated()
.and()
// ...
.formLogin();
}
我想发生的事情是,您将被安全过滤器重定向到登录页面,从而导致 302。
在我的 Spring 引导 Web 应用程序中,我配置了 Spring 安全性以允许像这样访问静态资源
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
// all requests must be authenticated
.anyRequest().authenticated()
// allow access to static resources
.antMatchers("/css/**", "/images/**", "/js/**", "/webjars/**").permitAll()
.and()
// login form authentication entry point
.formLogin()
.permitAll()
.loginPage("/login")
.usernameParameter("userId")
.and()
// allow unrestricted access to the logout action
.logout()
.logoutUrl("/logout")
.permitAll();
}
在我的登录 jsp 页面中,我包括 jquery 这样的
<script src="webjars/jquery/3.2.0/jquery.min.js"></script>
我在我的 pom 中这样声明 webjar
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.2.0</version>
</dependency>
但是生成的对资源@http://localhost:8080/webjars/jquery/3.2.0/jquery.min.js
returns的GET请求状态码为302且脚本未加载。我试过在请求中包含一个前导正斜杠,但结果相同。
匹配器的顺序很重要,请参阅Spring doc:
There are multiple children to the http.authorizeRequests() method each matcher is considered in the order they were declared.
所以 anyRequest()
匹配器必须在 antMatchers()
之后。这是 Spring 文档中的示例:
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/resources/**", "/signup", "/about").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")
.anyRequest().authenticated()
.and()
// ...
.formLogin();
}
我想发生的事情是,您将被安全过滤器重定向到登录页面,从而导致 302。