EMR 프로젝트 - 2
WPF 클라이언트와 Spring Boot 서버 연결
로그인에 사용할 회원 정보를 JPA 엔티티로 정의했다. 이메일은 로그인 식별자로 사용하기 때문에 중복되지 않도록 설정했고, 역할은 문자열로 저장하도록 구성했고, 역할은 DOCTOR, NURSE, ADMIN으로 구분했다.
만들고 있는 티켓 사이트와 비슷한 스프링 시큐리티 구조를 가지고 있다.
WPF에서 로그인 요청과 세션 쿠키 관리
WPF의 서버 통신은 AuthService에서 처리하도록 구성했다. 로그인 상태를 유지하기 위해 HttpClientHandler에 CookieContainer를 연결했다.
private AuthService()
{
_cookieContainer = new CookieContainer();
var handler = new HttpClientHandler
{
CookieContainer = _cookieContainer,
UseCookies = true
};
_httpClient = new HttpClient(handler)
{
BaseAddress = new Uri("http://localhost:8080")
};
}로그인 요청에서는 Spring Security의 폼 로그인 형식에 맞춰 FormUrlEncodedContent를 사용했다.
var formData = new Dictionary<string, string>
{
{ "email", email.Trim() },
{ "password", password }
};
var content = new FormUrlEncodedContent(formData);
var response = await _httpClient.PostAsync(
"/api/auth/login", content);로그인에 성공하면 같은 클라이언트로 내 정보 API를 호출한다.
var meResponse = await _httpClient.GetAsync("/api/auth/me");
if (meResponse.IsSuccessStatusCode)
{
var json = await meResponse.Content.ReadAsStringAsync();
CurrentUser =
JsonSerializer.Deserialize<MemberResponse>(json);
}로그인 시 프로그램이 종료되던 문제
ShutdownMode = ShutdownMode.OnExplicitShutdown;
var loginWindow = new LoginWindow();
bool? result = loginWindow.ShowDialog();
if (result == true)
{
var mainWindow = new MainWindow();
MainWindow = mainWindow;
ShutdownMode = ShutdownMode.OnMainWindowClose;
mainWindow.Show();
}
else
{
Shutdown();
}
}로그인 창이 닫히고 메인 창이 열리기 전까지 앱이 유지되어야 한다. 따라서 로그인 중에는 OnExplicitShutdown을
사용하고, 메인 창을 지정한 뒤에는 OnMainWindowClose로 변경했다.
결과물


댓글 0
댓글을 불러오는 중입니다.