Skip to main content

Login (/login/form)

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

Default password for 2026.05+ boxes

When install.sh first installs, a random password is automatically generated for each box (may not be the default admin123!). If you can access the box via SSH:

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

This file outputs admin / mqtt / opcua / API key / keystore passwords in one place. During factory provisioning, it is recommended to print/save and then seal the box.


1. Screen Layout

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

1.1 Background Visual Effects

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

All effects are defined in inline <style> or pp-login.css — they disappear when navigating to other pages (applies to login page only).

1.2 Form Area

AreaContent
Logo + namePlantPulse Edge logo (rotating) + name
HOSTNAME badge${edge_context.hostname} — immediately identifies which gateway
User IDAlphanumeric/@ — placeholder User ID
PasswordPlain text transmission — HTTPS recommended
Login buttonsubmit

2. Operation Flow

StepResult
Form submitPOST /login/login (user_id + password)
Response OKLoading spinner for 3 seconds (fa-spinner-third fa-spin) displayed → move to /ui/main
Response failedAlert box (shake animation, red emphasis) — "Please check your login ID and password, then enter them correctly."

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

If the 3-second loading feels long

This gives time for the platform's token validation/redirect race to settle. If you move to /ui/main too quickly, the first access may be redirected as 401 authentication and re-enter the login screen, so this delay is intentional for UX stability.


3. Input Validation

FieldConstraint
User ID4–20 characters (alphanumeric / @ etc.)
Password4–20 characters, plain text transmission (HTTPS recommended)

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


4. Common Pitfalls

SymptomCause / Solution
Login screen reappears after loginSession cookie blocked / mixed domains (HTTPS ↔ HTTP). Access from the same origin
All passwords rejectedCassandra pe.app_user_login table is empty. Request initial user registration from system administrator
Sessions keep disconnectingTomcat session timeout is too short — increase security.session.timeout.minutes in app.properties. Or configure PersistentManager + FileStore (already applied — session persists across restarts)
Simultaneous login from different PCsAllowed (multi-session) — RBAC / single login enforcement not supported
IIoT illustration not visibleBrowser zoom too small or viewport very narrow (clamp's minimum 200px larger than viewport). Desktop recommended

5. Security Notes

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

6. Learn More