Skip to main content

Login

Gateway web UI entry screen. After login, access to all /ui/* UI routes is available.

Initial password for 2026.05+ boxes

During initial install.sh installation, a random password is automatically generated for each box (it may not be the default admin123!). If SSH access to the box is possible:

sudo cat /etc/kopens/credentials.txt # chmod 0600 root, 박스 안에서만

This file contains the admin / mqtt / opcua / API key / keystore passwords in one place. For factory provisioning, we recommend printing/saving the file and then sealing the box.


1. Screen Layout​

┌─────────────────────────────────────────────┐
│ ░░░ 다중 SVG 웨이브 (5겹) + 오로라 + 빛 점 │
│ │
│ 🌀 (회전 로고) │
│ 플랜트펄스 │
│ 엣지 │
│ [HOSTNAME 뱃지] │
│ │
│ 👤 [사용자 ID] │
│ 🔑 [패스워드] │
│ │
│ [🔓 로그인] │
│ │
│ KOPENS © │
│ │
│ ┌──────────────┐ │
│ │ IIoT 게이트 │ │
│ │ 웨이 일러스트 │ │
│ └──────────────┘ │
└─────────────────────────────────────────────┘

1.1 Background Visual Effects​

  • Dark navy gradient — linear-gradient(135deg, #061830 0%, #0a2452 35%, #07182f 75%, #03101f 100%)
  • 5-layer SVG waves (.login_wave .wv1 ~ .wv5) — flowing smoothly with different amplitudes/phases
  • Aurora conic-gradient (.login_aurora) — slowly rotating from the screen center
  • 6 light orbs (.orb) — radial-gradient, floating at different coordinates
  • IIoT gateway illustration at the bottom right (.edge_pc_deco .edge_gw_svg) — clamp(200px, 22vw, 320px) drop-shadow + breathe animation. Used to visualize the identity of PlantPulse Edge

These effects are defined in inline <style> or pp-login.css — they disappear when you navigate to other pages (applied only to the login page).

1.2 Form Area​

AreaContent
Logo + NamePlantPulse Edge logo (rotating) + Korean title
HOSTNAME badge${edge_context.hostname} — immediately identifies which gateway you are on
User IDEnglish letters/numbers/@ — placeholder User ID
PasswordSent in plaintext — HTTPS recommended
Login buttonsubmit

2. Operation Flow​

StepResult
Form submitPOST /login/login (user_id + password)
Response OKShows loading spinner for 3 seconds (fa-spinner-third fa-spin) → navigate to /ui/main
Response failurealert box (shake animation, red highlight) — "Please verify your login ID and password and enter them correctly."

User information is stored in session attribute _USER_LOGIN (JSONObject) — UserFilter / ApiAuthFilter determine session pass/fail based on this attribute.

If the 3-second loading feels long

It gives time for the platform-side token verification/redirect race to settle. If you move to /ui/main too quickly, the initial connection may get a 401 auth redirect and re-enter the login screen — this delay is intentional for UX stability.


3. Input Validation​

FieldConstraint
User ID4–20 characters (English letters / numbers / @ etc.)
Password4–20 characters, sent in plaintext (HTTPS recommended)

required="true" — HTML5 validation blocks empty values. minlength/maxlength are also applied.


4. Common Pitfalls​

SymptomCause / Solution
Re-login screen immediately after loginSession cookie blocked / mixed domain (HTTPS ↔ HTTP). Access using the same origin
All passwords rejectedCassandra pe.app_user_login table is empty. Ask the system administrator to register an initial user
Session keeps droppingTomcat session timeout is short — increase security.session.timeout.minutes in app.properties. Or use PersistentManager + FileStore configuration (already applied — session persists across restarts)
Concurrent login from another PCAllowed (multiple sessions) — RBAC / single login enforcement not supported
IIoT illustration not visibleBrowser zoom is too small or viewport is very narrow (the clamp minimum 200px is larger than the viewport). Desktop recommended

5. Security Notes​

  • HTTPS recommended — Enforce HTTPS when exposed to the external network (place behind a Tomcat connector or nginx/Apache reverse proxy)
  • REST /api/v1/* requires authentication — ApiAuthFilter passes if it satisfies any of the following auth methods:
    • X-API-Key header (value injected via EDGE_REST_API_KEY_FILE or EDGE_REST_API_KEY)
    • Authorization: Bearer <key> header
    • Or login session (already logged in via browser) — session passes if _USER_LOGIN attribute exists
  • ?api_key=<key> query parameters can leave keys in URL history/proxy cache, so they are rejected with 401
  • Keys are configured in edge.rest.api.key of app.properties and enforced only when edge.rest.api.auth=true. For details, see REST API Guide
  • API call audit logs — every /api/* call is logged in a single line by ApiAccessLogFilter (method/path/status/duration/IP/user/auth mode/UA). IP is based on the default RemoteAddr, and the apikey plaintext is masked to the first 4 characters + length
  • Password change — gear icon at the top right → Settings → edge.admin_password → Save → Restart (Details)

Learn More​