【发布时间】:2019-07-29 12:13:02
【问题描述】:
我正在使用 Angular 和 spring-boot。 当我想在本地主机之外调用 api 我给了我一个连接被拒绝的错误。
角度服务:
export class ProfileService {
private baseUrl = 'http://localhost:8090/users';
constructor(private http: HttpClient) {
}
getProfile(id: number): Observable<Object> {
return this.http.get(`${this.baseUrl}` + '/load/' + `${id}`);
}
spring-boot 应用:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Collections.singletonList("*"));
config.setAllowedHeaders(Arrays.asList("Origin", "Content-Type", "Accept"));
config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH"));
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
从 angular 获取请求的用户控制器:
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
private IUsersService iUsersService;
@GetMapping("/list/grid")
public Iterable<UsersViewModel> getAllEmployees() {
return Dozer.mapList(iUsersService.getAll(), UsersViewModel.class);
}
@GetMapping("/load/{id}")
public UsersViewModel getUserById(@PathVariable(value = "id") Long userId){
return Dozer.mapClass(iUsersService.findById(userId).get(),UsersViewModel.class);
}
}
【问题讨论】:
-
检查this1是否有帮助。
-
我的代码是这样的。对 localhost 来说是正确的,但在外面它是错误的
-
您使用的是 Spring Security 吗?在这种情况下,请在您的问题中包含您的 Spring Security 配置
-
不,我不使用它
-
请说明您使用的是哪个 Spring Boot 版本?并且您没有在您的问题中使用 Spring Boot,因为根据它设置 CORS 有不同的方法。
标签: java spring apache spring-boot