我不知所措。我正在尝试配置CORS
,并且我已经尝试了在internet/Stack溢出中可以找到的所有东西。
请求在Postman中有效,但在使用公理的React中无效。
以下是我用于删除用户的函数(这在 Postman
中有效,但在 React 中触发时不起作用):
deleteEmployeeById(id) {
// return axios.delete(API_BASE_URL + `employees/${id}`);
var testing = "";
return axios
.delete(API_BASE_URL + `employees/${id}`, {
headers: {
Authorization: `Bearer ${HARDCODED_JWT_TESTING}`,
},
})
.then("yessssss")
.catch((error) => {
console.log("failed to delete emp by id" + error);
});
}
}
我有一个安全配置.java文件,如下所示:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
MyUserDetailsService myUserDetailsService;
@Autowired
private JwtRequestFilter jwtRequestFilter;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// TODO : use this line when i implement bcrypt
// auth.userDetailsService(myUserDetailsService).passwordEncoder(passwordEncoder());
auth.userDetailsService(myUserDetailsService);
}
// TODO : should use this password encoder
// public PasswordEncoder passwordEncoder() {
// return new BCryptPasswordEncoder();
// }
@Bean
public PasswordEncoder passwordEncoder() {
// TODO : not secure. Use a different encoder. testing only
return NoOpPasswordEncoder.getInstance();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// allow users to access "authenticate" page without being authenticated
// all other requests must be authenticated
// stateless tells it to not create a session? Do i need? Not sure yet
// http.csrf().disable().authorizeRequests().antMatchers("/api/authenticate").permitAll().anyRequest()
// .authenticated().and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.cors().configurationSource(request -> new CorsConfiguration().applyPermitDefaultValues()).and().csrf()
.disable().authorizeRequests().antMatchers("/api/authenticate").permitAll().anyRequest().authenticated()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
// create bean of type 'authenticationManager'
return super.authenticationManagerBean();
}
@Bean
CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("*"));
configuration.setAllowedMethods(Arrays.asList("HEAD", "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
configuration.setAllowCredentials(true);
configuration.setAllowedHeaders(Arrays.asList("*"));
configuration.setExposedHeaders(Arrays.asList("X-Auth-Token", "Authorization", "Access-Control-Allow-Origin",
"Access-Control-Allow-Credentials"));
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
}
我不知道错误在哪个函数中,但我假设它是corsConfigurationSource()
方法。但是,我看不出这不应该工作的问题。在我尝试为应用程序添加安全性之前,它曾经工作过。
正如您在该方法中看到的,我已经设置了所有允许的方法,我允许所有来源等,但在尝试从我的数据库中删除用户时仍然会出现此错误:
Access to XMLHttpRequest at 'http://localhost:8080/api/employees/6151c89ea1b79f789a7a964b' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
不过,这在邮递员中确实有效。我可以删除用户没有问题,它只是在从我的前端React应用程序触发时无法正常工作。
看起来我允许CORS
中的所有内容,任何想法还有什么需要配置的??
为了更好地清晰和测试,您可以尝试通过以下方法测试您的corsConfigurationSource()
。请根据您的应用程序更改代码,例如源代码等。
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
configuration.setAllowedMethods(Arrays.asList("*"));
configuration.setAllowedHeaders(Arrays.asList("*"));
configuration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
它基本上允许所有标头,方法和源。它不适合生产,但出于测试目的,您可以尝试一下。
尝试在实例化CorsConfiguration
后删除. applyPermitDefaultValue()
中的SecurityConfig
调用。这基本上是将CORS配置重置为默认值:
此外,调用配置Source()
方法,而不是实例化新的配置
。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().configurationSource(corsConfigurationSource()).and().csrf()
.disable().authorizeRequests().antMatchers("/api/authenticate").permitAll().anyRequest().authenticated()
.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
}
此外,按如下方式更新您的CorsConfigurationSource
:
@Bean
CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000"));
configuration.setAllowedMethods(Arrays.asList("HEAD", "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
configuration.setAllowCredentials(true);
configuration.setAllowedHeaders(Arrays.asList("*"));
configuration.setExposedHeaders(Arrays.asList("X-Auth-Token", "Authorization", "Access-Control-Allow-Origin",
"Access-Control-Allow-Credentials"));
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
我在组件中有这个函数,它应该向express API发送POST请求: 这是向其发送请求的API: 我还要求在express,app.js文件中使用neccessary CORS依赖项 API路由运行良好,当我确实获得请求时,但是,当我执行post请求时,我总是得到这个错误: 未能加载http://localhost:3000/api/v1/addcomment:对飞行前请求的响应未通过访问控制检
试图将axios post请求从Vue应用程序(localhost)发送到我的nodejs API(localhost和heroku)。 如果请求是在没有数据或头的情况下发送的,则接收响应不会有问题,但是当我添加它们时,我会收到以下错误: 我已经尝试了不同的选择,服务器端和客户端,建议类似的问题,但没有成功。 客户端请求: 服务器endpoint: 我尝试了一些答案: 对预飞行请求的响应没有通过访
当我使用离子服务时,我不断收到以下错误。。。 对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。起源http://localhost:8100因此不允许访问。 它只出现在“post”请求中。我的“get”请求没有任何错误。我看过代理的文档,但我并不打算走这条路。我目前正在使用CORS Chrome插件作为解决办法,但很快将会运送到移动设备(离子视图)进行测试,我相信
每当我尝试使用axios发送删除endpoint的请求时,都会出现以下错误: 通过CORS策略阻止从源http://localhost:3000在http://localhost:8080/api/payment_card/delete/1234123412343433处访问XMLHttpRequest:对预检请求的响应未通过权限改造检查:请求的资源上不存在“Access-Control-Allo
我有一个问题。 我正在尝试设置简单的服务器,它将从传感器向mySQL发送数据。路径/bezp/数据。php?当我在web brower中执行此操作时,temperature=“number”正在工作。我还可以在串行监视器中看到文本“connected”,所以它会输入IF,但数据库仍然不会更新。 Arduino代码: 此外,温度传感器正在工作,我正在调用另一个文件中的函数。