资源在src / main / resources / static / css或src / main / resources / static / js下,我使用spring boot,安全等级是:
@Configuration
@EnableWebMvcSecurity
@EnableGlobalAuthentication
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
// .permitAll().anyRequest().authenticated();
// http.formLogin().loginPage("/login").permitAll().and().logout()
// .permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("test").password("test")
.roles("USER");
}
}
当我访问" / index"它运行良好(可以加载资源);但是,如果我取消注释该类中的四行,则无法加载资源,这四行意味着:
http.authorizeRequests().antMatchers("/", "/index", "/quizStart")
.permitAll().anyRequest().authenticated();
http.formLogin().loginPage("/login").permitAll().and().logout()
.permitAll();
有人可以帮忙吗?提前谢谢。
答案 0 :(得分:21)
您可能希望确保将包含这些项目的目录设置为permitAll。
这是我的春季安全上下文文件的摘录。在资源目录下,我有js,css和images文件夹,这些文件夹由此行授予权限。
<security:intercept-url pattern="/resources/**" access="permitAll" />
答案 1 :(得分:18)
出于某种原因,这对我不起作用:
http.authorizeRequests().antMatchers("/resources/**").permitAll();
我不得不补充一下:
http.authorizeRequests().antMatchers("/resources/**").permitAll().anyRequest().permitAll();
此外,此行必须在restrics访问的代码之后。
答案 2 :(得分:6)
添加以下
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**").anyRequest();
}
答案 3 :(得分:4)
你也可以直接使用&#34; / * .js&#34;对于特定文件或&#34; / resources / **&#34;目录
http.authorizeRequests()
.antMatchers("/", "/login", "/logout", "/error").permitAll()
.antMatchers("/resources/**").permitAll()
.antMatchers("/*.js").permitAll()
.antMatchers("/api/**").authenticated()
答案 4 :(得分:4)
我遇到了同样的问题,permitAll()
解决方案对我不起作用。我在@Override
类中添加了以下WebSecurityConfig
方法。
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/img/**", "/icon/**");
}
祝你好运!
答案 5 :(得分:0)
我遇到了同样的问题,改变对“permitAll”的访问权限并没有帮助。 我创建了一个新的http模式,我将安全性设置为“none”,然后我可以在没有身份验证的情况下下载css和js文件。
<http pattern="/resources/**" security="none" />
答案 6 :(得分:0)
这最终对我有用。 / home(将显示登录页面)和错误消息不需要身份验证。所有资源都是permitAll,并且/ url url已经过身份验证。任何其他网址(例如/ users / customers等..)都需要添加为isAuthenticated()
<security:intercept-url pattern="/home" access="isAnonymous()"/>
<security:intercept-url pattern="/error*" access="isAnonymous()"/>
<security:intercept-url pattern="/main" access="isAuthenticated()"/>
<security:intercept-url pattern="/css/**" access="permitAll" />
<security:intercept-url pattern="/js/**" access="permitAll" />
<security:intercept-url pattern="/fonts/**" access="permitAll" />
<security:intercept-url pattern="/images/**" access="permitAll" />