npm install axios
package com.example.springboot.controller;
import org.springframework.web.bind.annotation.*;
@RestController // JSON, XML 등과 같은 데이터 반환 목적
@CrossOrigin(origins = "*") // 서버 XMLHttpRequest 해결용
@RequestMapping("/react")
public class ReactSpringController {
// http://localhost:8081/react/login
@GetMapping("login")
// @RequestParam --> 쿼이스트링 데이터 출력
public String login(@RequestParam String id, String pw){
System.out.println("접근완료");
System.out.println("ID : "+id);
System.out.println("PW : "+pw);
// smhrd, 456
String result="";
if(id.equals("smhrd") && pw.equals("456")){
result="smhrdNick";
} else {
result ="로그인 실패";
}
return "result";
}
}
import React, { useRef } from "react";
import axios from "axios";
import { useNavigate } from "react-router-dom";
const Login = () => {
const nav = useNavigate();
const id = useRef();
const pw = useRef();
function tryLogin() {
// 사용자가 적은 ID, PW 값을 가져와서
// SpringBoot 서버로 전송하겠습니다 ! --> 비동기 통신방식 (axios)
let inputId = id.current.value;
let inputPw = pw.current.value;
axios
.get(`http://localhost:8081/react/login?id=${inputId}&pw=${inputPw}`)
.then((res) => {
// 로그인 성공 -> Main
// 로그인 실패 -> 로그인 실패 알림
console.log(res);
if (res.data == "smhrdNick") {
window.localStorage.setItem("nick", res.data);
nav("/");
} else {
alert("로그인 실패");
}
});
// 로그인 성공시 Nick 값 -> Main
}
return (
<div>
{/*
submit : 데이터 요청을 보내고 페이지를 새로고침하겠씁니다. (동기)
React에서는 사용을 지양함
*/}
<h1>로그인 페이지 입니다</h1>
ID : <input ref={id}></input>
<br></br>
PW : <input ref={pw}></input>
<br></br>
<button onClick={tryLogin}>로그인 시도</button>
</div>
);
};
export default Login;
,"proxy": "http://localhost:8081"
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*");
}
}