gnana и Arpit и спасибо за ваш ответ.
Рассматривая проблему с CORS, я добавил код, который вы мне дали, и он работает. Но можете ли вы объяснить мне разницу между вашим решением (SOLUTION1) и (SOLUTION2 :) тем, что я добавил файл proxy.config. json
{
"/api/*": {
"target": {
"host": "localhost",
"protocol": "http:",
"port": 8080
},
"secure": false,
"changeOrigin": true,
"logLevel": "info"
}
}
и запустил переднюю часть с
ng serve --proxy-config proxy.config.json
В SOLUTION2 каждый запрос, запускаемый во внешней части (то есть http://localhost: 4200 ), переводится в http://localhost: 8080 и что о следующем запросе http://localhost: 8080 / api / user / login , который автоматически запускается при запуске приложения angular
С помощью вашего решения (SOLUTION1) вы разрешаете запрос такого как http://localhost: 4200 (но на самом деле, когда SOLUTION2 все еще работает, этот запрос преобразуется в передней части в http://localhost: 8080 ) и в то же время во внутренней части принять на себя запрос http://localhost: 8080 / api / user / login , который запускается при первом запуске приложения angular (домашняя страница приложения, не содержащая логин страница (позже отображается, когда я нажмите на кнопку))
Если вы можете дать мне какое-то объяснение, спасибо
Учитывая другие вопросы, которые я задаю в первом посте, я исследовал дальше
Дон Не знаю, почему запрос http://localhost: 8080 / api / user / login запускается, когда я запускаю домашнюю страницу внешнего интерфейса приложения. Тьерри предложил поделиться моим кодом angular, но я не уверен, что он поможет: единственный запрос, который предоставляет логин для части angular, не сработал. Я проверил это. Процесс аутентификации для входа в интерфейсную часть основан на форме, которая появляется (появляется) при нажатии на кнопку. Тьерри, не могли бы вы предложить мне, какой частью приложения angular вы хотите, чтобы я поделился. Спасибо
Что я могу сказать вам, когда у меня есть следующий контроллер
@RestController
@RequestMapping({"/api/user"})
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/login",
method = RequestMethod.POST)
public @ResponseBody UserDTO login(@RequestBody UserDTO userDTO){
String message = userService.checkIfUserExistsAndGoodCredential(userDTO);
if (message.isEmpty()) {
userDTO = userService.findByEmailAndPassword(userDTO.getEmail(), userDTO.getPassword());
userDTO.setPassword("");
} else {
userDTO.setMessage(message);
}
return userDTO;
}
Следующий URL: http://localhost: 8080 / api / user / login срабатывает (почему? нет никакой причины, которую я вижу, единственное, что я могу сказать, это то, что он зависит от следующего кода на обратной стороне
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.headers()
.frameOptions().sameOrigin()
.and()
.authorizeRequests()
.antMatchers("/**/*.scss", "/**/*.js","/**/*.html").permitAll()
.antMatchers("/").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/api/user/login")
.defaultSuccessUrl("/")
// .failureUrl("/login?error")
.failureUrl("/")
.permitAll()
Когда я проверяю Firebug, у меня есть следующий заголовок
URL de la requête : http://localhost:8080/api/user/login
Méthode de la requête : GET
Adresse distante : 127.0.0.1:8080
Code d’état :405
и следующий ответ
timestamp 2020-03-11T11:09:05.482+0000
status 405
error Method Not Allowed
message Request method 'GET' not supported
path /api/user/login
Этот ответ является ожидаемым, поскольку он сопоставлен с методом POST, но при изменении сопоставления контроллера на следующий
@RestController
@RequestMapping({"/api/user"})
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(value = "/dummylogin",
method = RequestMethod.POST)
public @ResponseBody UserDTO login(@RequestBody UserDTO userDTO){
String message = userService.checkIfUserExistsAndGoodCredential(userDTO);
if (message.isEmpty()) {
userDTO = userService.findByEmailAndPassword(userDTO.getEmail(), userDTO.getPassword());
userDTO.setPassword("");
} else {
userDTO.setMessage(message);
}
return userDTO;
}
@RequestMapping(value = "/login",
method = RequestMethod.GET)
public @ResponseBody String login(){
return "Hello world";
}
Я получаю следующий заголовок
URL de la requête :http://localhost:8080/api/user/login
Méthode de la requête : GET
Adresse distante : 127.0.0.1:8080
Code d’état :200
и следующий ответ
Hello world
Не могли бы вы объяснить, почему этот запрос запускается автоматически, и если я не могу отказаться от этого поведения, как я могу должны отобразить его на части контроллера? Спасибо