@@ -21,7 +21,9 @@ Java Spring Boot SSO (Single Sign-On) authentication service. Part of the KeyMob
- Java 17
- Spring Boot (via parent POM)
- Spring Security
- Spring Data JPA (from parent POM) over the existing MySQL datasource
- Spring Cloud (Eureka discovery client)
- springdoc-openapi 2.5.0 (Swagger UI)
- Maven
- Apache Commons Lang
- Jasypt for property encryption
...
...
@@ -80,8 +82,18 @@ Java Spring Boot SSO (Single Sign-On) authentication service. Part of the KeyMob
- Use `@RestController` with `@RequestMapping`
- Session info endpoint: `/sessionInfo`
- Language endpoint: `/lang`
- Login info endpoint: `/loginInfo?userId=` (admin only) - accepts multiple user ids (repeated param or comma-separated), returns last login time, current locked state/lock time per user
- Principal format: `username:userId:displayName` (colon-delimited)
### Login Records
-`com.keymobile.sso.login.UserLoginRecord` JPA entity persisted in table `user_login_record` in the existing MySQL datasource (see `application-default.yml`); keyed by `userId`
- Only the last login time is persisted (recorded in `AuthenticationSuccessListener`); lock state/lock time stays in-memory in `LoginAttemptService` (`getLockTime`) and is NOT stored in the database
- JPA `ddl-auto: update` creates/updates the table automatically
### API Documentation
- Swagger UI at `/swagger-ui.html`, OpenAPI JSON at `/v3/api-docs` (both require an authenticated session)
- OpenAPI bean config in `conf/OpenApiConfig.java`; controllers annotated with springdoc/`io.swagger.v3.oas.annotations`
## Testing
- No existing test files in the repository
...
...
@@ -96,5 +108,7 @@ Java Spring Boot SSO (Single Sign-On) authentication service. Part of the KeyMob
-**No linting tools configured** - no Checkstyle, SpotBugs, or PMD
-**License checking** is baked into auth success handler
-**Hardcoded AES key/IV** in `LicenseChecker` and `LicenseMgr`
-**Do NOT add a second DataSource** - `CustomizedUserDetailService` (auth library) injects the single MySQL `DataSource` for authentication
- If the internal nexus is unreachable, build offline: `mvn -o -llr clean package -DskipTests`