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工作正常。
1条答案
按热度按时间gkl3eglg1#
您的配置中没有要求授权的地方,也不允许任何未经授权的调用。
我相信你需要有这样的部分:
或/和
在您的springSecurityFilterChain中。
此外,请考虑允许所有设置,然后逐步添加安全配置。