VPD Backoffice
+권한, 토큰, ORDS 검증을 관리합니다.
+diff --git a/.env.example b/.env.example index e955970..a41e059 100644 --- a/.env.example +++ b/.env.example @@ -24,6 +24,8 @@ export BACKOFFICE_DB_PASSWORD="${ADB_PASSWORD}" # export ADB_CONN="${ADB_USER}/${ADB_PASSWORD}@${ADB_TNS}" # --- (2b) Spring Boot 백오피스 --- +export BACKOFFICE_ADMIN_USER="admin" +export BACKOFFICE_ADMIN_PASSWORD="admin" export BACKOFFICE_ORDS_BASE_URL="https://yh0olybn5pqce4n-d8aukro81636mon0.adb.ap-seoul-1.oraclecloudapps.com/ords" export BACKOFFICE_ORDS_TIMEOUT_SECONDS="10" diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/config/SecurityConfig.java b/src/main/java/com/cloudhandson/vpdbackoffice/config/SecurityConfig.java index ba66a9f..fbe4cb1 100644 --- a/src/main/java/com/cloudhandson/vpdbackoffice/config/SecurityConfig.java +++ b/src/main/java/com/cloudhandson/vpdbackoffice/config/SecurityConfig.java @@ -2,7 +2,6 @@ package com.cloudhandson.vpdbackoffice.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; @@ -20,7 +19,9 @@ public class SecurityConfig { .authorizeHttpRequests(auth -> auth .requestMatchers("/css/**", "/js/**", "/webjars/**").permitAll() .anyRequest().authenticated()) - .formLogin(Customizer.withDefaults()) + .formLogin(login -> login + .loginPage("/login") + .permitAll()) .logout(logout -> logout.logoutSuccessUrl("/login?logout")) .build(); } diff --git a/src/main/java/com/cloudhandson/vpdbackoffice/web/LoginController.java b/src/main/java/com/cloudhandson/vpdbackoffice/web/LoginController.java new file mode 100644 index 0000000..1eccf30 --- /dev/null +++ b/src/main/java/com/cloudhandson/vpdbackoffice/web/LoginController.java @@ -0,0 +1,13 @@ +package com.cloudhandson.vpdbackoffice.web; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class LoginController { + + @GetMapping("/login") + public String login() { + return "login"; + } +} diff --git a/src/main/resources/static/css/app.css b/src/main/resources/static/css/app.css index cba212c..c900b55 100644 --- a/src/main/resources/static/css/app.css +++ b/src/main/resources/static/css/app.css @@ -22,6 +22,71 @@ body { font-family: "Oracle Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; } +.login-body { + min-height: 100vh; +} + +.login-shell { + align-items: center; + display: flex; + min-height: 100vh; + padding: 2rem 1rem; +} + +.login-panel { + background: var(--rw-surface); + border: 1px solid var(--rw-border); + border-radius: 8px; + box-shadow: var(--rw-shadow); + margin: 0 auto; + max-width: 420px; + padding: 1.5rem; + width: 100%; +} + +.login-brand { + align-items: center; + border-bottom: 1px solid var(--rw-border); + display: flex; + gap: .85rem; + margin-bottom: 1rem; + padding-bottom: 1rem; +} + +.login-mark { + align-items: center; + background: var(--rw-primary); + border-radius: 8px; + color: #fff; + display: inline-flex; + font-weight: 800; + height: 3rem; + justify-content: center; + width: 3rem; +} + +.login-brand h1 { + font-size: 1.35rem; + font-weight: 700; + margin: 0; +} + +.login-brand p { + color: var(--rw-muted); + margin: .2rem 0 0; +} + +.login-form { + display: grid; + gap: 1rem; +} + +.login-form label { + color: var(--rw-muted); + font-size: .875rem; + font-weight: 600; +} + .rw-nav, .navbar { background: rgba(255, 254, 253, .96) !important; diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html new file mode 100644 index 0000000..27130b2 --- /dev/null +++ b/src/main/resources/templates/login.html @@ -0,0 +1,37 @@ + + +
+ +권한, 토큰, ORDS 검증을 관리합니다.
+