-
Урок 1.
00:07:24
Course Overview
-
Урок 2.
00:03:30
A few suggestions
-
Урок 3.
00:07:12
What is a Microservice?
-
Урок 4.
00:07:21
Sample Microservices Architecture
-
Урок 5.
00:04:49
Download and Install Postman HTTP Client
-
Урок 6.
00:09:10
Postman Overview
-
Урок 7.
00:11:13
Resource and Collection URIs
-
Урок 8.
00:03:45
HTTP Methods: GET, POST, DELETE and PUT
-
Урок 9.
00:04:13
HTTP Headers: Accept and Content Type
-
Урок 10.
00:05:49
Install Java Platform(JDK)
-
Урок 11.
00:03:27
Download and Install Spring Tool Suite(STS)
-
Урок 12.
00:00:42
Introduction
-
Урок 13.
00:06:13
Creating a New Project
-
Урок 14.
00:04:43
Creating a new Spring project using Spring Boot Initializr
-
Урок 15.
00:02:46
Create Users Rest Controller class
-
Урок 16.
00:03:14
Adding Methods to Handle POST, GET, PUT, DELETE HTTP requests
-
Урок 17.
00:04:37
Running Web Service Application
-
Урок 18.
00:03:32
Reading Path Variables with @PathVariable annotaion
-
Урок 19.
00:04:52
Reading Query String Request Parameters
-
Урок 20.
00:04:36
Making Parameters Optional or Required
-
Урок 21.
00:04:12
Returning Java Object as Return Value
-
Урок 22.
00:05:36
Returning Object as JSON or XML Representation
-
Урок 23.
00:04:59
Set Response Status Code
-
Урок 24.
00:08:14
Reading HTTP POST Request Body. The @RequestBody annotation.
-
Урок 25.
00:08:57
Validating HTTP POST Request Body
-
Урок 26.
00:04:51
Store Users Temporary
-
Урок 27.
00:09:07
Handle HTTP PUT Request
-
Урок 28.
00:04:53
Handle HTTP Delete Request
-
Урок 29.
00:07:45
Handle an Exception
-
Урок 30.
00:05:36
Return Custom Error Message Object
-
Урок 31.
00:03:07
Handle a Specific Exception
-
Урок 32.
00:04:14
Throw and Handle You Own Custom Exception
-
Урок 33.
00:02:55
Catch More Than One Exception with One Method
-
Урок 34.
00:10:55
Dependency Injection: Create and Autowire a Service Layer Class
-
Урок 35.
00:06:26
Constructor Based Dependency Injection
-
Урок 36.
00:04:53
Run Web Service as a Standalone Application
-
Урок 37.
00:04:30
Introduction to Eureka Discovery Service
-
Урок 38.
00:05:40
Startup Eureka Service Discovery
-
Урок 39.
00:02:11
Introduction to Building a Users Microservice
-
Урок 40.
00:03:41
Users Microservice - Create new Spring Boot Project
-
Урок 41.
00:03:02
Enable Eureka Client
-
Урок 42.
00:02:05
Create Users Rest Controller
-
Урок 43.
00:03:00
Access Users Web Service Endpoint via Eureka Discovery Service
-
Урок 44.
00:01:35
Introduction to Building an Account Management Microservice
-
Урок 45.
00:04:00
Create a new Spring Boot Project
-
Урок 46.
00:02:57
Access Account Management Microservice via Eureka Discovery Service
-
Урок 47.
00:01:49
Important note
-
Урок 48.
00:03:25
Introduction to Zuul API Gateway
-
Урок 49.
00:03:38
Create a ZUUL API Gateway Project
-
Урок 50.
00:04:15
Access Microservices via API Gateway
-
Урок 51.
00:00:51
Load Balancer - Introduction
-
Урок 52.
00:08:59
Starting Up More Microservices
-
Урок 53.
00:04:48
Trying How Load Balancer Works
-
Урок 54.
00:01:44
Important Note
-
Урок 55.
00:06:28
Introduction
-
Урок 56.
00:05:05
Creating API Gateway Project
-
Урок 57.
00:06:50
Automatic Mapping of Gateway Routes
-
Урок 58.
00:07:50
Manually Configuring API Gateway Routes
-
Урок 59.
00:04:09
Trying how it works
-
Урок 60.
00:05:07
Rewriting URL Path
-
Урок 61.
00:01:58
Automatic & Manual Routing
-
Урок 62.
00:08:59
Starting Up More Microservices
-
Урок 63.
00:03:54
Trying How Load Balancer Works
-
Урок 64.
00:03:20
H2 In-memory Database. Introduction.
-
Урок 65.
00:07:41
H2 Database Console Overview
-
Урок 66.
00:04:45
Adding Support for the H2 Database
-
Урок 67.
00:00:42
Introduction
-
Урок 68.
00:01:15
Adding method to handle HTTP Post Request
-
Урок 69.
00:03:18
Implementing the Create User Request Model class
-
Урок 70.
00:04:17
Validating HTTP Request Body
-
Урок 71.
00:02:49
Application Layers
-
Урок 72.
00:02:11
Implementing Service Layer Class
-
Урок 73.
00:03:16
Create a Shared DTO Class
-
Урок 74.
00:02:17
Generate Unique Public User Id
-
Урок 75.
00:02:02
Adding Support for Spring Data JPA
-
Урок 76.
00:06:08
Implementing User Entity Class
-
Урок 77.
00:02:35
Implementing Spring Data JPA CRUD Repository
-
Урок 78.
00:11:16
Save User Details in Database
-
Урок 79.
00:02:30
Return Http Status Code
-
Урок 80.
00:04:31
Implementing Create User Response Model
-
Урок 81.
00:01:16
Add Spring Security to Users Microservice
-
Урок 82.
00:08:44
[Updated] Add WebSecurity Configuration
-
Урок 83.
00:06:27
[Updated] Encrypt User Password
-
Урок 84.
00:04:51
[Updated] Allow Requests from API Gateway Only
-
Урок 85.
00:04:16
Trying how it works
-
Урок 86.
00:04:18
[Updated] Adding Support to Return XML
-
Урок 87.
00:01:11
Introduction
-
Урок 88.
00:01:22
Implementing LoginRequestModel
-
Урок 89.
00:05:27
[Updated]AuthenticationFilter. Implementing attemptAuthentication()
-
Урок 90.
00:03:07
Register Authentication Filter with HTTP Security
-
Урок 91.
00:10:32
Implementing loadUserByUsername() method
-
Урок 92.
00:07:11
successfullAuthentication(): Get User Details.
-
Урок 93.
00:02:15
successfullAuthentication(): Adding JWT Dependencies
-
Урок 94.
00:07:06
sucessfullAuthentication(): Generate JWT
-
Урок 95.
00:02:41
Configure API Gateway route to /login
-
Урок 96.
00:04:54
[Updated] Trying how /login works
-
Урок 97.
00:04:37
[Updated] Customize User Authentication URL
-
Урок 98.
00:01:54
Introduction to Spring Security on API Gateway
-
Урок 99.
00:01:18
Adding Support for Spring Security and JWT Tokens
-
Урок 100.
00:04:30
Enable Web Security in Zuul
-
Урок 101.
00:05:07
Allow Access to Registration and Login Urls
-
Урок 102.
00:08:44
Implementing Authorization Filter
-
Урок 103.
00:05:23
Accessing Protected Microservices with Access Token
-
Урок 104.
00:03:11
Introduction
-
Урок 105.
00:04:05
Using Header Predicate
-
Урок 106.
00:02:28
[Updated]Adding Support for JWT Token Validation
-
Урок 107.
00:03:50
Creating AuthorizationFilter class
-
Урок 108.
00:01:13
Assign Custom Filter to a Gateway Route
-
Урок 109.
00:03:06
Signup and Login Routes
-
Урок 110.
00:07:43
Reading Authorization HTTP Header
-
Урок 111.
00:08:40
[Updated] Validating JWT Access Token
-
Урок 112.
00:06:40
Accessing Protected Microservices with Access Token
-
Урок 113.
00:01:03
Introduction
-
Урок 114.
00:03:52
Creating Global Pre Filter
-
Урок 115.
00:03:33
Accessing Request Path and HTTP Headers
-
Урок 116.
00:03:50
Trying how Pre Filter Works
-
Урок 117.
00:03:06
Creating Global Post Filter
-
Урок 118.
00:02:39
Trying how the Post Filter works
-
Урок 119.
00:06:42
Defining Filters in a Single Class
-
Урок 120.
00:06:43
Ordering Global Filters
-
Урок 121.
00:02:23
Trying how ordered filters work
-
Урок 122.
00:04:04
Introduction to Spring Cloud Config Server
-
Урок 123.
00:02:54
Create Your Own Config Server
-
Урок 124.
00:02:25
Create Private GitHub Repository
-
Урок 125.
00:02:33
Naming Property Files Served by Config Server
-
Урок 126.
00:02:47
Configure Config Server to Access Private GitHub Repository
-
Урок 127.
00:03:17
Adding Properties File to Git Repository
-
Урок 128.
00:07:25
Configure Users Microservice to be a Client of Config Server
-
Урок 129.
00:02:19
Make Zuul Gateway a Client of Config Server
-
Урок 130.
00:03:53
Introduction to Spring Cloud Bus
-
Урок 131.
00:02:28
Add Spring Cloud Bus & Actuator Dependencies
-
Урок 132.
00:01:48
Enable the /busrefresh URL Endpoint
-
Урок 133.
00:03:21
Download and Run Rabbit MQ
-
Урок 134.
00:02:16
Rabbit MQ Default Connection Details
-
Урок 135.
00:08:38
Trying how Spring Cloud Bus Works
-
Урок 136.
00:03:30
Change default Rabbit MQ Password
-
Урок 137.
00:00:46
Introduction to Spring Cloud Config File System as a Backend
-
Урок 138.
00:04:52
Setting up File System Backend
-
Урок 139.
00:01:42
Previewing Values Returned by Config Server
-
Урок 140.
00:02:39
Trying how Microservices work
-
Урок 141.
00:02:32
Introduction
-
Урок 142.
00:07:02
Shared and a Microservice specific properties
-
Урок 143.
00:02:46
Introduction to Spring Boot Actuator
-
Урок 144.
00:02:01
[Updated] Add Spring Boot Actuator to Spring Cloud Gateway
-
Урок 145.
00:03:47
Enable Actuator's /gateway and /mappings endpoints
-
Урок 146.
00:03:27
View Spring Cloud API Gateway Routes using Actuator
-
Урок 147.
00:04:02
Enable Actuator for Users Microservice
-
Урок 148.
00:03:03
Trying how Actuator works in Users Microservice
-
Урок 149.
00:05:26
Actuator /httpexchanges endpoint
-
Урок 150.
00:01:01
Introduction
-
Урок 151.
00:03:17
Download and Install MySQL
-
Урок 152.
00:06:15
Start MySQL Server and Login
-
Урок 153.
00:06:26
Create MySQL Database And a New User
-
Урок 154.
00:03:03
Downloading and Installing MySQL Workbench
-
Урок 155.
00:05:28
Connect to MySQL Database using MySQL WorkBench
-
Урок 156.
00:04:16
MySQL WorkBench brief overview
-
Урок 157.
00:09:49
Configure MySQL Database Access Details
-
Урок 158.
00:02:49
Use H2 Console to Access MySQL Database
-
Урок 159.
00:01:41
Copy MySQL properties to a Config Server
-
Урок 160.
00:02:44
Introduction to Encryption and Decryption of Configuration Properties
-
Урок 161.
00:06:15
Add Java Cryptography Extension
-
Урок 162.
00:08:51
Symmetric Encryption of Properties
-
Урок 163.
00:05:06
Creating a Keystore for Asymmetric Encryption
-
Урок 164.
00:05:26
Asymmetric Encryption of Properties
-
Урок 165.
00:03:49
Introduction to Microservices Communication
-
Урок 166.
00:02:12
Clone Source Code of Albums Microservice
-
Урок 167.
00:05:38
A walk through an Albums Microservice
-
Урок 168.
00:05:45
Implementing Get User Details
-
Урок 169.
00:10:27
Make Users Microservice call Albums Microservice
-
Урок 170.
00:04:00
Trying how it works
-
Урок 171.
00:01:33
Feign Web Service Client - Introduction
-
Урок 172.
00:01:56
Enable Feign in Spring Boot Project
-
Урок 173.
00:05:08
Create Feign Client
-
Урок 174.
00:01:48
Using Feign Client
-
Урок 175.
00:03:13
Trying How Feign Client Works
-
Урок 176.
00:05:42
Enable HTTP Requests Logging in Feign Client
-
Урок 177.
00:04:37
Handle FeignException
-
Урок 178.
00:12:58
Handle Response Errors with Feign Error Decoder
-
Урок 179.
00:02:56
Introduction
-
Урок 180.
00:04:29
Configure Project to use Hystrix Circuit Breaker
-
Урок 181.
00:03:11
Trying How Hystrix Circuit Breaker & Feign work
-
Урок 182.
00:11:06
Error Handling with Feign Hystrix FallbackFactory
-
Урок 183.
00:07:55
Introduction
-
Урок 184.
00:02:42
Removing Hystrix Circuit Breaker
-
Урок 185.
00:03:17
Adding Resilience4j
-
Урок 186.
00:02:33
Actuator /health Endpoint
-
Урок 187.
00:04:23
Feign Client & Circuit Breaker Fallback method
-
Урок 188.
00:07:06
Circuit Breaker configuration properties
-
Урок 189.
00:04:51
Configure Access to Actuator endpoints
-
Урок 190.
00:07:27
Monitoring Circuit Breaker events in Actuator
-
Урок 191.
00:01:37
@Retry annotation
-
Урок 192.
00:03:14
Aspect Order
-
Урок 193.
00:03:03
Configuration properties
-
Урок 194.
00:03:53
Trying how it works
-
Урок 195.
00:03:44
[Updated]Introduction to Distributed Tracing with Micrometer and Zipkin
-
Урок 196.
00:03:19
[Updated] Starting up Zipkin
-
Урок 197.
00:04:36
[Updated]Add Micrometer and Zipkin dependencies
-
Урок 198.
00:02:17
Micrometer Tracing Sampling Probability
-
Урок 199.
00:03:33
Logging TraceId and SpanId
-
Урок 200.
00:01:49
Configure Micrometer to work with Feign
-
Урок 201.
00:06:19
View traces in Zipkin Dashboard
-
Урок 202.
00:05:33
Trace Requests Sent with RestTemplate
-
Урок 203.
00:02:05
Introduction to Aggregating Log Files with ELK Stack
-
Урок 204.
00:02:56
Configure Microservices to Log into a File
-
Урок 205.
00:01:40
Download Logstash
-
Урок 206.
00:09:12
Configure Logstash to Read Log Files
-
Урок 207.
00:05:57
[New]Download and Run Elasticsearch with Security Enabled
-
Урок 208.
00:05:05
[New]Configure Elasticsearch Security in Logstash
-
Урок 209.
00:06:51
Run Search Query
-
Урок 210.
00:04:59
[Updated]Download, Install and Run Kibana
-
Урок 211.
00:05:32
[Updated]View Aggregated Logs in Kibana
-
Урок 212.
00:02:16
Configure Spring Security to Eureka Server
-
Урок 213.
00:05:24
[Updated] Enable Web Security
-
Урок 214.
00:03:11
Configure Eureka Clients to use Username and Password
-
Урок 215.
00:04:21
Configure Eureka Service URL in Config Server
-
Урок 216.
00:04:01
Move Username and Password to Config Server
-
Урок 217.
00:06:04
Encrypting Username and Password
-
Урок 218.
00:08:00
Introduction to Running Microservices in Docker Containers
-
Урок 219.
00:14:57
Start up a new Linux Server on AWS EC2
-
Урок 220.
00:04:47
Connect to EC2 Instance
-
Урок 221.
00:01:52
Install Docker on AWS EC2
-
Урок 222.
00:01:58
Docker Hub Introduction
-
Урок 223.
00:09:13
Run RabbitMQ Docker Container
-
Урок 224.
00:06:50
Basic Docker Commands: Run, Stop, Start, Remove Containers and Images
-
Урок 225.
00:09:49
Create Config Server Docker Image
-
Урок 226.
00:04:28
Publish Config Server Docker Image to Docker Hub
-
Урок 227.
00:10:23
Run Config Server on EC2 from Docker Hub
-
Урок 228.
00:03:24
Start New EC2 Instance for Eureka
-
Урок 229.
00:04:02
Build Docker Image for Eureka Discovery Service
-
Урок 230.
00:11:21
Run Eureka in Docker container
-
Урок 231.
00:04:42
Elastic IP address for EC2 Instance
-
Урок 232.
00:04:42
Create Zuul Api Gateway Docker Image
-
Урок 233.
00:08:04
Run Zuul Api Gateway in Docker Container
-
Урок 234.
00:05:56
Run Elastic Search in Docker container
-
Урок 235.
00:06:35
Run Kibana in Docker Container
-
Урок 236.
00:04:32
Run Kibana and Elastic Search on the same Network
-
Урок 237.
00:04:28
Docker Image for Albums Microservice
-
Урок 238.
00:10:50
Run Albums Microservice Docker Image on EC2
-
Урок 239.
00:08:51
Logstash Docker Image for Albums Microservice
-
Урок 240.
00:04:35
Run Logstash in Docker container
-
Урок 241.
00:08:38
Run MySQL in Docker Container
-
Урок 242.
00:03:20
Make MySQL Docker Container Persist Data on EC2
-
Урок 243.
00:04:23
Build Users Microservice Docker Image
-
Урок 244.
00:10:00
Run Users Microservice in Docker container
-
Урок 245.
00:07:52
Run Logstash for Users Microservice
-
Урок 246.
00:05:10
Introduction
-
Урок 247.
00:08:32
Preparing Configuration for another environment
-
Урок 248.
00:11:33
Creating Beans Based on Spring Boot @Profile used
-
Урок 249.
00:01:03
Running Docker Container for Different Environments
-
Урок 250.
00:06:31
Introduction
-
Урок 251.
00:01:23
Pass Authorization Header to Downstream Microservice
-
Урок 252.
00:09:25
[Updated] Create and register the AuthorizationFilter
-
Урок 253.
00:02:54
[Updated]Register Authorization Filter with HTTP Security
-
Урок 254.
00:04:29
[Updated] Trying how it works
-
Урок 255.
00:04:56
Introduction to Method-Level security
-
Урок 256.
00:02:28
[Updated] Enable Method Level Security
-
Урок 257.
00:03:31
@PreAuthorize annotation example
-
Урок 258.
00:03:03
Trying how @PreAuthorize annotation works
-
Урок 259.
00:07:12
@PostAuthorize annotation example
34) Role-based Access Control in Microservice
35) Role-based Access Control Exercise: Albums Microservice
36) Role-based Access Control at the Spring Cloud API Gateway level
37) Eureka Server Cluster
https://github.com/simplyi/SpringCloudVideoCourse/issues/8
Using Header Predicate - status 403 at "/users-ws/users/status/check" with Bearer abc
https://github.com/simplyi/SpringCloudVideoCourse/issues/7
If you have followed up until now and you have made sure that there is no mistake on your side. The problem is at the 00:30.
He uses a filter it doesn't exist AuthenticationHeaderFilter. Delete the line or add the class
https://github.com/simplyi/SpringCloudAPIGateway/blob/main/src/main/java/com/appsdeveloperblog/photoapp/api/gateway/AuthorizationHeaderFilter.java
Mind the PATH!!!!!! to the class.
However, as a first step to solve the problem I suggest that you delete the parameter
spring.cloud.gateway.routes[0].filters[2]=AuthorizationHeaderFilter
If it works - than you know the reason, create the class, copy the code, return the line of the code.
Now, I use application.yml file therefore if you need my help feel free to copy the text:
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: users-status-check
uri: lb://users-ws
predicates:
- Path=/users/status/check
- Method=GET
- Header=Authorization, Bearer (.*)
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/users-ws/(?.*), /$\{segment}
- AuthorizationHeaderFilter
- id: users-ws
uri: lb://users-ws
predicates:
- Path=/users-ws/users
- Method=POST
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/users-ws/(?.*), /$\{segment}
- id: users-ws-2h-console
uri: lb://users-ws
predicates:
- Path=/users-ws/h2-console
- Method=GET
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/users-ws/(?.*), /$\{segment}
- id: users-ws-2h-login
uri: lb://users-ws
predicates:
- Path=/users-ws/login
- Method=POST
filters:
- RemoveRequestHeader=Cookie
- RewritePath=/users-ws/(?.*), /$\{segment}
discovery:
locator:
enabled: true
lower-case-service-id: true
server:
port: 8082
eureka:
client:
service-url:
defaultZone: http://localhost:8010/eureka
Bloody hell!
I have written my previous message in Russian, I hope Google Translate helps you to figure out what it actually means.
Basically, if you work with the project in the IntelliJ IDEA - read the article I shared with you to gain a better understanding of how to run multiple projects (mutliservices) within one project.
https://medium.com/backend-habit/intellij-idea-running-multiple-project-microservices-in-one-workspace-d61126fe0eef
Если коротко, когда создали два проекта по-отельности, создаёте третий, пустой, называете его микросервисы, и дальше начинаете импортировать два проекта, которые создали до него. Прилагаю сразу два конфига, переименуйте application.properties -> application.yml
PhotoAppApiUsers
application.yml
server:
port: 0
spring:
devtools:
restart:
enabled: true
application:
name: users-ws
eureka:
client:
service-url:
defaultZone: http://localhost:8010/eureka
PhotoAppDiscoveryService
application.yml
spring:
application:
name: discovery_service
server:
port: 8010
eureka:
instance:
prefer-ip-address: true
client:
serviceUrl:
defaultZone: http://localhost:8010/eureka
register-with-eureka: false
fetch-registry: false