Java Spring Boot许可证在Web安全配置适配器中不工作

Java Spring Boot许可证在Web安全配置适配器中不工作,java,spring-boot,spring-security,Java,Spring Boot,Spring Security,当我发布到/api/v1/auth/register时,我得到一个403响应,该响应由配置的accessDeniedHandler生成。但是,我希望允许此请求,因为它包含在permitAll()中,并且位于anyRequest().authenticated()之前 诸如GET/api/v1/reference/countries之类的请求工作正常。此外,我对这些/api/v1/auth/**端点进行的集成测试也可以工作,这表明与CORS有关,尽管飞行前请求是200 知道这个安全配置有什么问题吗

当我发布到
/api/v1/auth/register
时,我得到一个403响应,该响应由配置的
accessDeniedHandler
生成。但是,我希望允许此请求,因为它包含在
permitAll()
中,并且位于
anyRequest().authenticated()之前

诸如
GET/api/v1/reference/countries
之类的请求工作正常。此外,我对这些
/api/v1/auth/**
端点进行的集成测试也可以工作,这表明与CORS有关,尽管飞行前请求是200

知道这个安全配置有什么问题吗

@配置
@启用全局方法安全性(
preprestenabled=true,
securedEnabled=true,
jsr250Enabled=true
)
@订单(1)
@所需参数构造函数
公共类SecurityConfig扩展了WebSecurity配置适配器{
私有最终用户详细信息服务impl用户详细信息服务;
私有最终配置;
私有最终ObjectMapper ObjectMapper;
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http
.cors()
.及()
.授权请求()
蚂蚁配对者(
“/api/v1/auth/register”,
“/api/v1/auth/register/check”,
“/api/v1/auth/register/activate”,
“/api/v1/auth/password/update”,
“/api/v1/auth/recover”,
“/api/v1/auth/recover/check”,
“/api/v1/auth/recover/reset”,
“/api/v1/csrf令牌”,
“/api/v1/reference/**”
)
.permitAll()
.anyRequest()
.authenticated()
.及()
.formLogin()
.successHandler((请求、响应、身份验证)->{
response.getWriter().append(“确定”);
response.setStatus(HttpServletResponse.SC_OK);
})
.failureHandler((请求、响应、异常)->{
response.getWriter().append(“无效凭据或非活动帐户”);
response.setStatus(HttpServletResponse.SC_未经授权);
})
.loginProcessingUrl(“/api/v1/auth/login”)
.permitAll()
.及()
.logout()
.logoutRequestMatcher(新的AntPathRequestMatcher(“/api/v1/auth/logout”,“POST”))
.permitAll()
.及()
.例外处理()
.accessDeniedHandler((请求、响应、accessDeniedException)->{
response.setContentType(MediaType.APPLICATION\u JSON\u值);
response.setStatus(HttpServletResponse.SC_禁止);
objectMapper.writeValue(
response.getWriter(),
错误响应库
.builder()
.code(错误类型.访问被拒绝)
.状态(HttpServletResponse.SC_禁止)
.消息(“访问被拒绝”)
.build()
);
})
.authenticationEntryPoint((请求、响应、authException)->{
response.setContentType(MediaType.APPLICATION\u JSON\u值);
response.setStatus(HttpServletResponse.SC_未经授权);
objectMapper.writeValue(
response.getWriter(),
错误响应库
.builder()
.code(需要ErrorType.LOGIN\u)
.状态(HttpServletResponse.SC_未经授权)
.message(“您无权访问此资源”)
.build()
);
})
.及()
.userDetailsService(userDetailsService);
if(config.isCsrfDisabled()){
http
.csrf()
.disable();
}
}
@凌驾
受保护的无效配置(AuthenticationManagerBuilder auth)引发异常{
auth.userDetailsService(userDetailsService);
}
@豆子
公共BCryptPasswordEncoder passwordEncoder(){
返回新的BCryptPasswordEncoder();
}
@豆子
公共公司配置源公司配置源(){
最终var配置=新的CORSCOConfiguration();
配置.setAllowCredentials(true);
setAllowedOrigins(config.getAllowedOrigins());
setAllowedMethods(asList(“GET”、“POST”、“PUT”、“PATCH”、“DELETE”);
setAllowedHeaders(Arrays.asList(HttpHeaders.AUTHORIZATION,HttpHeaders.CACHE_控件,HttpHeaders.CONTENT_类型,HttpHeaders.ACCEPT));
最终变量源=新的UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration(“/api/**”,配置);
返回源;
}
}
这是我的CORS配置:

@配置
@RequiredArgsConstructor(onConstructor=@_u(@Autowired))
公共类网络配置{
私有最终配置;
@豆子
公共WebMVCConfiguer corscoonfiguer(){
返回新的WebMVCConfiguer(){
@凌驾
公共作废添加公司标志(公司注册处){
最终变量allowedOrigins=可选
.ofNullable(config.getAllowedOriginates())
.map(origins->origins.toArray(新字符串[]{}))
.orElse(新字符串[]{});
System.out.println(“为以下来源启用CORS:”+Arrays.asList(allowedOrigins.toString());
登记处
.addMapping(“/api/**”)
.允许的起源(允许的起源)
.allowCredentials(真)
.允许的方法(“*”)
.允许的标题(“*”);
}
};
}
}
我正在从
http://localhost:3000
,这是项目之一
@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
           .csrf().disable()
           ... // other configurations
}