У меня возникает ошибка ниже, когда я использую исходный код внешнего интерфейса для вызова моего внутреннего java сервера.
Access to XMLHttpRequest at 'http://localhost:8513/oauth/token' from origin 'http://localhost:9513' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
Я использую springboot (2.2.4.RELEASE) + OAuth2 (2.2 .1.RELEASE) + Jwt (1.0.9.RELEASE). Вставьте мой pom. xml сюда
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-oauth2</artifactId>
<version>${oauth2.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>${spring-jwt.version}</version>
</dependency>
Я добавил конфигурацию, разрешающую использование CORS полиции, но похоже, что она вообще не работает. Моя конфигурация безопасности находится здесь
JWTOAuth2Config. java
@Configuration
@EnableAuthorizationServer
public class JWTOAuth2Config extends AuthorizationServerConfigurerAdapter{
private static final int accessTokenValiditySeconds = 5 * 60 * 1;
private static final int refreshTokenValiditySeconds = 60 * 60 * 1;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private TokenEnhancer jwtTokenEnhancer;
@Autowired
private TokenStore tokenStore;
@Autowired
private JwtAccessTokenConverter jwtAccessTokenConverter;
@Autowired
private UserService userService;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
tokenEnhancerChain.setTokenEnhancers(Arrays.asList(jwtTokenEnhancer, jwtAccessTokenConverter));
endpoints
.tokenStore(tokenStore)
.accessTokenConverter(jwtAccessTokenConverter)
.tokenEnhancer(tokenEnhancerChain)
.authenticationManager(authenticationManager)
.userDetailsService(userService);
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("organization")
.secret(PasswordEncoderFactories.createDelegatingPasswordEncoder().encode("organization666"))
.authorizedGrantTypes("refresh_token", "password", "client_credentials")
.scopes("webclient", "mobileclient")
.accessTokenValiditySeconds(accessTokenValiditySeconds)
.refreshTokenValiditySeconds(refreshTokenValiditySeconds);
}
}
ResourceServerConfiguration. java config разрешает CORS в классе HttpSecurity в ResourceServerConfigurerAdapter, но не работает.
@Configuration
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure (HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/v1/moikiitos/**")
.authenticated()
.and().cors()
.and().csrf().disable();
}
}
config разрешает CORS в классе HttpSecurity в WebSecurityConfigurerAdapter, также не работает. WebSecurityConfigurer. java
public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter{
@Autowired
UserService userService;
@Value("${security.enable-csrf}")
private boolean csrfEnabled;
@Override
@Bean(name = BeanIds.AUTHENTICATION_MANAGER)
public AuthenticationManager authenticationManagerBean() throws Exception{
return super.authenticationManagerBean();
}
@Override
@Bean
public UserDetailsService userDetailsServiceBean() throws Exception{
return super.userDetailsServiceBean();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(new BCryptPasswordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
if(!csrfEnabled) {
http.cors().and()
.csrf().disable();
}
}
}
установить csrf для flase в application.properties
security.enable-csrf=false
даже я также использую конфигурацию кода ниже java для WebMvcConfiguer, но он также не работает.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer{
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:9513")
.allowedMethods("*")
.allowedHeaders("*");
}
}
Более того, я также использую этот @CrossOrigin на своем контроллере. Кто-нибудь может мне в этом помочь. Цените. Я читал некоторые статьи, такие как origin было заблокировано политикой CORS Spring boot и React , но мне это не помогло.