# eazybytes/spring-security architecture

> Architecture diagram of the GitHub repository eazybytes/spring-security, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/eazybytes/spring-security
- Repository: https://github.com/eazybytes/spring-security

## Overview

This repository is a Spring Security course implemented as progressively developed Java and Angular examples, rather than one deployable product. A representative workflow is a customer making a bank request: Spring Security authenticates the request using customer details and authorities, then bank controllers expose account-related API capabilities to the UI. Sampled user-details code confirms lookup by email through a customer repository; the tree and README document broader authorization, CSRF/CORS, JWT, OAuth2/OIDC, and identity-provider topics. Many individual integrations and controller call paths were not sampled, so those links are not asserted.

Main entry points: [`section_10/springsecsection_10/src/main/java/com/eazybytes/config/EazyBankUserDetailsService.java`](https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/config/EazyBankUserDetailsService.java) (User details), [`section_10/springsecsection_10/src/main/java/com/eazybytes/controller`](https://github.com/eazybytes/spring-security/tree/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/controller) (Bank API), [`section_10/springsecsection_10/src/main/java/com/eazybytes/repository/CustomerRepository.java`](https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/repository/CustomerRepository.java) (Customer repository), [`section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/service/ContactService.java`](https://github.com/eazybytes/spring-security/blob/4.x.x/section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/service/ContactService.java) (Contact service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_bank["Bank examples"]
  node_bankapi["Bank API"]
  node_customerrepo["Customer repository"]
  node_bankdata["Bank data"]
  node_bankstore[("Bank database")]
  node_school["EazySchool app"]
  node_contactservice["Contact service"]
end

subgraph group_security["Security layers"]
  node_securityconfig["Security config"]
  node_filters["Security filters"]
  node_userservice["User details"]
end

subgraph group_clients["Web clients"]
  node_bankui["Bank UI"]
end

subgraph group_course["Course capabilities"]
  node_securitytopics["Security foundations"]
  node_tokenflows["JWT and OAuth2"]
  node_authserver["Authorization server"]
  node_sociallogin["Social login"]
end

node_customer(("Bank customer"))
node_keycloak["Keycloak"]

node_customer -->|"uses"| node_bankui
node_bankui -->|"requests"| node_bankapi
node_securityconfig -->|"loads users"| node_userservice
node_userservice -->|"looks up email"| node_customerrepo
node_customerrepo -->|"reads"| node_bankstore
node_bankapi -->|"serves"| node_bankdata
node_school -->|"submits contact"| node_contactservice
node_contactservice -->|"logs contact"| node_bankdata
node_authserver -.->|"loads users"| node_userservice
node_keycloak -.->|"supports"| node_tokenflows
node_sociallogin -.->|"covers"| node_tokenflows

click node_bankui "https://github.com/eazybytes/spring-security/tree/4.x.x/section_11/bank-app-ui/src/app"
click node_bankapi "https://github.com/eazybytes/spring-security/tree/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/controller"
click node_securityconfig "https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/config/ProjectSecurityConfig.java"
click node_filters "https://github.com/eazybytes/spring-security/tree/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/filter"
click node_userservice "https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/config/EazyBankUserDetailsService.java"
click node_customerrepo "https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/repository/CustomerRepository.java"
click node_bankdata "https://github.com/eazybytes/spring-security/tree/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/model"
click node_school "https://github.com/eazybytes/spring-security/tree/4.x.x/section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/controller"
click node_contactservice "https://github.com/eazybytes/spring-security/blob/4.x.x/section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/service/ContactService.java"
click node_securitytopics "https://github.com/eazybytes/spring-security/tree/4.x.x/section1/springsecsection1/src/main/java"
click node_tokenflows "https://github.com/eazybytes/spring-security/tree/4.x.x/section_16"
click node_authserver "https://github.com/eazybytes/spring-security/tree/4.x.x/section_16/authserver/src/main/java/com/eazybytes/authserver"
click node_sociallogin "https://github.com/eazybytes/spring-security/tree/4.x.x/section_16"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_bankapi,node_customerrepo,node_bankdata,node_bankstore,node_school,node_contactservice toneBlue
class node_securityconfig,node_filters,node_userservice toneAmber
class node_bankui toneMint
class node_securitytopics,node_tokenflows,node_authserver,node_sociallogin toneRose
class node_customer,node_keycloak toneIndigo
```

## Components

### Bank examples

- [Bank API](https://github.com/eazybytes/spring-security/tree/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/controller): `section_10/springsecsection_10/src/main/java/com/eazybytes/controller`
- [Customer repository](https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/repository/CustomerRepository.java): `section_10/springsecsection_10/src/main/java/com/eazybytes/repository/CustomerRepository.java`
- [Bank data](https://github.com/eazybytes/spring-security/tree/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/model): `section_10/springsecsection_10/src/main/java/com/eazybytes/model`
- **Bank database**
- [EazySchool app](https://github.com/eazybytes/spring-security/tree/4.x.x/section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/controller): `section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/controller`
- [Contact service](https://github.com/eazybytes/spring-security/blob/4.x.x/section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/service/ContactService.java): `section7/eazyschool-end/src/main/java/com/eazybytes/eazyschool/service/ContactService.java`

### Security layers

- [Security config](https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/config/ProjectSecurityConfig.java): `section_10/springsecsection_10/src/main/java/com/eazybytes/config/ProjectSecurityConfig.java`
- [Security filters](https://github.com/eazybytes/spring-security/tree/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/filter): `section_10/springsecsection_10/src/main/java/com/eazybytes/filter`
- [User details](https://github.com/eazybytes/spring-security/blob/4.x.x/section_10/springsecsection_10/src/main/java/com/eazybytes/config/EazyBankUserDetailsService.java): `section_10/springsecsection_10/src/main/java/com/eazybytes/config/EazyBankUserDetailsService.java`

### Web clients

- [Bank UI](https://github.com/eazybytes/spring-security/tree/4.x.x/section_11/bank-app-ui/src/app): `section_11/bank-app-ui/src/app`

### Course capabilities

- [Security foundations](https://github.com/eazybytes/spring-security/tree/4.x.x/section1/springsecsection1/src/main/java): `section1/springsecsection1/src/main/java`
- [JWT and OAuth2](https://github.com/eazybytes/spring-security/tree/4.x.x/section_16): `section_16`
- [Authorization server](https://github.com/eazybytes/spring-security/tree/4.x.x/section_16/authserver/src/main/java/com/eazybytes/authserver): `section_16/authserver/src/main/java/com/eazybytes/authserver`
- [Social login](https://github.com/eazybytes/spring-security/tree/4.x.x/section_16): `section_16`

### Other components

- **Bank customer**
- **Keycloak**

## Connections

- Bank customer → Bank UI: uses
- Bank UI → Bank API: requests
- Security config → User details: loads users
- User details → Customer repository: looks up email
- Customer repository → Bank database: reads
- Bank API → Bank data: serves
- EazySchool app → Contact service: submits contact
- Contact service → Bank data: logs contact
- Authorization server → User details: loads users
- Keycloak → JWT and OAuth2: supports
- Social login → JWT and OAuth2: covers
