Login (/login/form)
Gateway web UI entry screen. After login, access to all /ui/* UI paths is available.
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 gradient —
linear-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>orpp-login.css— they disappear when navigating to other pages (applies to login page only).
1.2 Form Area
| Area | Content |
|---|---|
| Logo + name | PlantPulse Edge logo (rotating) + name |
| HOSTNAME badge | ${edge_context.hostname} — immediately identifies which gateway |
| User ID | Alphanumeric/@ — placeholder User ID |
| Password | Plain text transmission — HTTPS recommended |
| Login button | submit |
2. Operation Flow
| Step | Result |
|---|---|
| Form submit | POST /login/login (user_id + password) |
| Response OK | Loading spinner for 3 seconds (fa-spinner-third fa-spin) displayed → move to /ui/main |
| Response failed | Alert 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.
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
| Field | Constraint |
|---|---|
| User ID | 4–20 characters (alphanumeric / @ etc.) |
| Password | 4–20 characters, plain text transmission (HTTPS recommended) |
required="true" — HTML5 validation blocks empty values. minlength/maxlength also applied.
4. Common Pitfalls
| Symptom | Cause / Solution |
|---|---|
| Login screen reappears after login | Session cookie blocked / mixed domains (HTTPS ↔ HTTP). Access from the same origin |
| All passwords rejected | Cassandra pe.app_user_login table is empty. Request initial user registration from system administrator |
| Sessions keep disconnecting | Tomcat 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 PCs | Allowed (multi-session) — RBAC / single login enforcement not supported |
| IIoT illustration not visible | Browser 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 authentication —ApiAuthFilterpasses if it satisfies at least one of the following authentication methods:X-API-Keyheader (value injected byEDGE_REST_API_KEY_FILEorEDGE_REST_API_KEY)Authorization: Bearer <key>header- or login session (already logged in via browser) — passes if
_USER_LOGINattribute exists
?api_key=<key>query parameters can leave keys in URL logs/proxy cache and are rejected with 401- Key is set in
app.propertiesatedge.rest.api.key+ enforced only whenedge.rest.api.auth=true. See details at REST API Guide - API call audit log — every
/api/*call logs one line byApiAccessLogFilter(method/path/status/duration/IP/user/auth mode/UA), IP is based on defaultRemoteAddr, 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
- First screen after login: Home Dashboard
- Change password/API key: Password · API Key Change
- REST API authentication details: REST API Guide