Spring Security:应用SecurityConfigurer并在SecurityFilterChain中执行进一步的自定义

z4iuyo4d  于 12个月前  发布在  Spring
关注(0)|答案(1)|浏览(114)

我有一个Sping Boot 项目,我试图同时做以下三件事:
1.如here所述禁用CSRF保护(此应用程序不应通过浏览器访问,因此这是我处理Spring Security对非GET端点的默认CSRF保护的方法)
1.在“Spring Cloud Azure 5.X”选项卡中,按照此处所述应用SecurityConfigurer
1.遵循新的lambda格式(我不确定是否可以应用SecurityConfigurer,尽管SecurityConfigurerAdapter.and()方法因此被弃用)
现在我有以下SecurityFilterChain方法:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        .apply(AadResourceServerHttpSecurityConfigurer.aadResourceServer())
            .and()
        .authorizeHttpRequests(authorizeHttpRequests -> 
            authorizeHttpRequests
                .anyRequest()
                .authenticated())
        .csrf(csrf -> csrf.disable());
    return http.build();
}

字符串
这让我从应用SecurityConfigurer中获得了所需的功能(因为它可以正确使用@PreAuthorize注解来检查Azure应用程序/用户/等上的权限),但它看起来没有正确禁用CSRF,因为我在从Postman调用时在任何非GET端点上都会收到401错误。
在应用SecurityConfigurer之后,执行进一步自定义的正确方法是什么?在遵循新的lambda格式的同时,是否可以这样做?

编辑:我已经为我原来的情况想出了一个变通办法,但我把这个问题留了下来,以防有人能从理论上回答这个问题。在这个特定的情况下,MS提供的配置程序已经为OAuth2授权的请求禁用了CSRF保护,这使得全局禁用CSRF保护的任务变得无关紧要,因为所有非GET端点都应该是OAuth2授权的。我在构建这个应用程序时遇到了这个问题,因为我在实验时试图暂时离开OAuth2授权。

因此,如果有人特别试图实现这个MS配置器并遇到CSRF问题:不要费心包括自定义SecurityFilterChain,并确保所有非GET端点都是OAuth2授权的。

wfveoks0

wfveoks01#

你检查过你的spring安全配置是否有效吗?看起来你的配置不起作用。检查@Configuration annotation是否放在你配置的class上面。

相关问题