Spring MVC安全配置问题:默认情况下,默认匹配器已添加到列表的开头

时间:2019-03-20 09:21:22

标签: java spring spring-mvc spring-security

我正在项目中配置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()位以正确的顺序工作?

With denyAll() ^^请参阅denyAll()已添加到列表的开头。
Without .anyRequest() ^^如果删除.anyRequest().denyAll()位,则会添加默认位。

0 个答案:

没有答案