SULTANOV.DEV

Hi there!

My name is Anar Sultanov. I'm a professional Java Developer living in Stockholm, Sweden.
It’s nice to meet you.

06 Feb 2022

Access Spring Beans from Unmanaged Objects

We may run into the need to inject Spring Beans into JPA entities or some other unmanaged objects, which could be an indication that we need to rethink our architecture, but sometimes this cannot be avoided. It is possible to do this using @Configurable annotation, but for this to work, the annotated types must be woven with the AspectJ weaver.
In this tutorial, we are going to look at an alternative way to access Spring-managed components from unmanaged objects that is arguably better than injection.

05 May 2021

Orchestration-based Saga using Cadence Workflow

The Saga pattern is a way to maintain data consistency in distributed systems by sacrificing atomicity and relying on eventual consistency. A saga is a sequence of transactions that update each service, and if at some stage it fails, it performs compensating transactions that counteract the previous stages. There are two common saga implementation approaches - choreography and orchestration.
In this tutorial, we are going to look at how to implement orchestration-based saga using Cadence Workflow.

30 Oct 2020

Externalized Authorization using OPA and Spring Security

While OAuth2 and OIDC have become the de-facto standard for authentication and are very popular, existing authorization standards (e.g. XACML, UMA) are difficult to implement and even use, so developers continue to roll their own solutions, which is time-consuming and increases maintenance costs.
In this tutorial, we are going to look at how to simplify authorization by externalizing access control decisions using Open Policy Agent and Spring Security.

26 Jan 2020

Authorization Code Flow with PKCE in Spring Security OAuth

RFC 7636: Proof Key for Code Exchange (PKCE, pronounced “pixy”) describes an extension to the Authorization Code flow to protect public clients from authorization code interception attack.
In this tutorial, we are going to look at how to implement this extension in an OAuth 2.0 authorization server built using Spring Security OAuth, which does not support it out of the box.

24 Nov 2019

Client-Side Load Balancing in gRPC Java

Load balancing is the process of distributing network traffic between multiple servers, used to improve the performance and reliability of websites, applications, databases and other services. Using a centralized load balancer is the most traditional approach for this, but client-side load balancing still has some advantages and is also quite common.
In this tutorial, we are going to look at how to implement client-side load balancing in gRPC Java client.