A role-based web app for keeping a support team's project resources in one place. Each project holds its own links (portals, consoles, tools) and SOPs (written steps or uploaded PDF documents). Admins manage projects and users and decide who can see which project. Regular users see only the projects they're assigned to.
Built with Java 21, Spring Boot 4, Spring Security, Spring Data JPA, Thymeleaf and PostgreSQL (H2 for local development).
- Login and roles: form login with Spring Security, BCrypt password hashing, and
ADMIN/USERroles - Project access control: admins see every project; users see only the projects assigned to them
- Project management (admin): create, edit, delete and search projects
- Items per project: add, edit, delete and search items inside a project
LINK: a named URLSOP: text content, with an optional uploaded file (PDF etc., up to 10 MB)
- User management (admin): create, edit, enable/disable and delete users, and assign them to projects
- Method-level security:
@PreAuthorizeon admin-only actions, plus URL rules for/admin/**
| Layer | Technology |
|---|---|
| Language | Java 21 |
| Framework | Spring Boot 4.0 (Web MVC) |
| Security | Spring Security 6, BCrypt |
| Persistence | Spring Data JPA / Hibernate, PostgreSQL (prod), H2 (dev) |
| Views | Thymeleaf, HTML, CSS |
| Build | Maven |
envmanager/
└── src/main/java/com/remotemanager/envmanager/
├── config/ SecurityConfig, WebConfig (serves /uploads), DataInitializer (seed users)
├── controller/ ProjectController, ItemController, AdminUserController
├── model/ User, Project, Item, ItemType
├── repository/ Spring Data JPA repositories
└── service/ Business logic + CustomUserDetailsService
└── src/main/resources/
├── templates/ Thymeleaf pages (login, projects, items, users)
└── static/ CSS and images
- User ↔ Project: many-to-many (
user_projectsjoin table) - Project → Item: one-to-many (items are deleted with their project)
Prerequisites: JDK 21. Nothing else: the Maven wrapper downloads Maven, and the dev profile uses an embedded H2 database.
cd envmanager
./mvnw spring-boot:run # Windows: mvnw.cmd spring-boot:runOpen http://localhost:8080 and log in. Data is saved in envmanager/data/, so it survives restarts; delete that folder to start fresh.
| Username | Password | Role |
|---|---|---|
admin |
admin123 |
ADMIN |
testuser1 |
testuser@123 |
USER |
Set these environment variables and start the app:
| Variable | Example |
|---|---|
SPRING_PROFILES_ACTIVE |
prod |
DB_URL |
jdbc:postgresql://<host>:5432/rsem_db |
DB_USERNAME / DB_PASSWORD |
your database credentials |
RSEM_ADMIN_PASSWORD |
password for the first admin account |
RSEM_USER_PASSWORD |
optional; creates testuser1 if set |
Tables are created automatically on first run. In prod, no demo passwords are built in: a seed account is only created when its password variable is set.
| Path | Who | Purpose |
|---|---|---|
/login |
Everyone | Login page |
/projects |
Logged-in users | Project list (filtered by role) |
/projects/new, /projects/save, /projects/delete/{id} |
Admin | Manage projects |
/projects/{projectId}/items |
Logged-in users | Links and SOPs for a project |
/projects/{projectId}/items/search?keyword= |
Logged-in users | Search items |
/admin/users |
Admin | Manage users and project assignments |
- Versioned schema migrations with Flyway
- Deploy with a hosted PostgreSQL database
- Store uploaded SOP files in cloud storage instead of the local
uploads/folder - Switch delete actions from GET links to POST requests
- Unit and integration tests
Seetharaman Kumar Iyer, GitHub @Benex1114