spring-security webFlux应用程序对任何请求都返回404

pvabu6sv  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(255)

WebFlux对任何请求都返回404,无论您是否被授权。在我的应用程序中,我没有使用用户,但我有令牌,代表他们的身份验证。如果令牌有效,则给予访问权限。
控制器:

@RestController
@RequestMapping("api/token")
public class TokenController {

    @GetMapping("")
    public Mono<ServerResponse> helloWorld() {
        return ServerResponse.ok().bodyValue("Hello world!");
    }

}

安全性配置:

@EnableWebFluxSecurity
public class SecurityConfiguration {

    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(
            ServerHttpSecurity http,
            JwtAuthenticationConverter converter,
            JwtAuthenticationManager manager
    ) {

        AuthenticationWebFilter filter = new AuthenticationWebFilter(manager);

        filter.setServerAuthenticationConverter(converter);

        return http
                .httpBasic().disable()
                .csrf().disable()
                .cors().disable()
                .formLogin().disable()
                .exceptionHandling()
                .authenticationEntryPoint(
                        (swe, e) ->
                                Mono.fromRunnable(
                                        () -> swe.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED)
                                )
                )
                .accessDeniedHandler(
                        (swe, e) ->
                                Mono.fromRunnable(
                                        () -> swe.getResponse().setStatusCode(HttpStatus.FORBIDDEN)
                                )
                )
                .and()
                    .authorizeExchange()
                        .pathMatchers("api/token*").permitAll()
                    .anyExchange().authenticated()
                .and()
                .addFilterAt(filter, SecurityWebFiltersOrder.AUTHENTICATION)
                .build();
    }

}

JwtAuthenticationManager、JwtAuthenticationProvider和JwtAuthenticationConverter工作正常。

gkl3eglg

gkl3eglg1#

您的配置中没有要求授权的地方,也不允许任何未经授权的调用。
我相信你需要有这样的部分:

.and()
.authorizeRequests()

或/和

.antMatchers("/actuator/**").permitAll()
.and()

在您的springSecurityFilterChain中。
此外,请考虑允许所有设置,然后逐步添加安全配置。

相关问题