spring security permit静态资产无效

时间:2017-12-10 00:46:34

标签: spring-boot spring-security

我理解@EnableWebSecurity禁用所有Spring安全默认值,因此我在WebSecurityConfigurerAdapter中覆盖了所需的方法。但是,无论我做什么css和所有其他静态资产得到403或405。

将spring boot 2.0.0.M7与从https://start.spring.io/

创建的spring security一起使用

文件夹结构是正常的

- resources
   - static
      - css
          styles.css   

web.ignoring()由于某种原因没有做任何事情,但是当我启用调试时,它确实提到已绕过以下路径,但我仍然得到405.

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**", "/webjars/**");
    }


    @Override
    protected void configure(HttpSecurity http) throws Exception {
       http.
            authorizeRequests()
                .antMatchers("/register").permitAll()
                .anyRequest().authenticated();
     }

}

为了进一步调试,我甚至尝试通过以下方式允许所有内容,但是每个网址仍然被拒绝,这非常令人困惑,让我觉得有一些我不理解的关键概念。

http.authorizeRequests().antMatchers("/**").permitAll()

最后,我还尝试使用不同位置的各种组合来实施WebMvcConfigurer

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/css/**").addResourceLocations("/css/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("/webjars/");
}

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

以上所有安全配置实际上都是正确的。您不必实施WebMvcConfigurer,只需展开WebSecurityConfigurerAdapter

原来是一个非常难以的错误来追踪。我有一个控制器提供了这样的注册表。

@Controller
public class RegistrationController {

    @GetMapping("/register")
    public String getRegisterView(Model model) {
        model.addAttribute("registerDto", new RegisterDto());
        return "register";
    }

    @PostMapping 
    public String register(@Valid @ModelAttribute("registerDto") RegisterDto registerDto, BindingResult result) {
        // business logic...
        return "register";
    }
}

该错误发生在@PostMapping我忘记包含路径!!这会在映射路径时导致spring出现各种问题。如果没有提供路径,这些注释会抛出异常会很好。

要解决此问题,我将其更新为@PostMapping("/register"),现在更新为

允许

web.ignoring().antMatchers("/css/**", "/js/**", "/webjars/**");

因此,请确保所有控制器路径注释都包含路径!