我正在项目中配置Spring Security,并且遇到了一个奇怪的问题。
这是配置代码:
http.authorizeRequests()
.antMatchers("/assets/**").permitAll()
.antMatchers("/login").anonymous()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/manager/**").hasRole("MANAGER")
.antMatchers("/").access("hasRole('admin') or hasRole('manager')")
.anyRequest().denyAll()
.and()
.formLogin()
.loginPage("/login")
.usernameParameter("username")
.passwordParameter("password")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login")
.and()
.csrf().disable();
问题是.anyRequest().denyAll()
部分最终成为DefaultFilterInvocationSecurityMetadataSource.requestMap
中列表的第一项,所有请求都被拒绝。如果我将其更改为.anyRequest().permitAll()
,将允许所有请求。如果我跳过.anyRequest()
,则默认情况下会将带有authenticated()
的默认值添加到开头。
如何让.anyRequest()
位以正确的顺序工作?
^^请参阅denyAll()
已添加到列表的开头。
^^如果删除.anyRequest().denyAll()
位,则会添加默认位。