【发布时间】:2018-12-12 19:05:01
【问题描述】:
我正在尝试将 Angular2 称为 SpringBoot 的一项服务,但是当我调用时出现此错误:
在我的 SpringBoot 中,我有:
package com.service.configure;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
@Configuration
@EnableWebSecurity
@ComponentScan(basePackages = "com.service")
public class ServiciosConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers(HttpMethod.OPTIONS);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/").permitAll().anyRequest().authenticated().and().httpBasic().and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("USER");
}
}
在 Angular2 中:
private fetchData() {
const url = 'http://localhost:8080/pg/get';
this.service.fetchData(url).subscribe(
data => {
console.log('mis datos ', data);
this.headers = data[0].headers;
this.params = data[1].params;
});
}
public fetchData(url: string): Observable<any> {
let headers = new Headers();
headers.append("Authorization", "Basic YWRtaW46YWRtaW4=");
return this.http.get<Object[]>(url);
}
如果我输入http://localhost:8080/pg/get 我可以得到数据 =)。
但是如果我尝试使用 Angular 是不可能的......
我的朋友使用了“邮递员”,他收到了数据
代码邮递员:
var settings = {
"async": true,
"crossDomain": true,
"url": "http://myIp:8080/pg/get",
"method": "GET",
"headers": {
"Authorization": "Basic YWRtaW46YWRtaW4=",
"Cache-Control": "no-cache",
"Postman-Token": "e1225c81-8cb0-4809-9a2a-c82776793906"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
我的控制器:
@RestController
@RequestMapping(value={"/pg"})
@CrossOrigin
public class PgController {
@Autowired
PgService pgRepository;
@RequestMapping(method=RequestMethod.GET,value="/", produces = MediaType.APPLICATION_JSON_VALUE)
String home() {
return "¡Servicio configuración!";
}
@RequestMapping(method=RequestMethod.GET,value="/get", produces = MediaType.APPLICATION_JSON_VALUE)
public List<tp_parametros_generales> getAllParameters() {
List<tp_parametros_generales> tasks = pgRepository.getPg();
return tasks;
}
}
【问题讨论】:
-
尝试使用CORS Toggle chrome插件,也许有帮助
-
我无法为导航器“Chrome、firefox 等”添加扩展,我使用的是 Angular2 而不是 AngularJs
标签: angular spring-boot