<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: JavaFullStackDev.in</title>
    <description>The latest articles on Forem by JavaFullStackDev.in (@javafullstackdev).</description>
    <link>https://forem.com/javafullstackdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1512466%2F009246b2-1100-48c3-9ac2-4876cfc5f24b.png</url>
      <title>Forem: JavaFullStackDev.in</title>
      <link>https://forem.com/javafullstackdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/javafullstackdev"/>
    <language>en</language>
    <item>
      <title>How DIDI BHAIYA GANG ruined indian IT sector</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sat, 31 May 2025 16:41:46 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/how-didi-bhaiya-gang-ruined-indian-it-sector-2g24</link>
      <guid>https://forem.com/javafullstackdev/how-didi-bhaiya-gang-ruined-indian-it-sector-2g24</guid>
      <description>&lt;p&gt;&lt;strong&gt;The 'Didi Bhaiya Gang' Phenomenon: Unmasking the Illusion of India's Tech Influencer Culture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In recent years, a new breed of tech influencers, colloquially termed as 'Didi Bhaiya', has emerged in India's digital landscape. These individuals, often former employees of prestigious tech companies like FAANG (Facebook, Amazon, Apple, Netflix, Google), have transitioned into full-time content creators, offering online courses and promising lucrative salaries to aspiring software developers. While their rise has been meteoric, so has the controversy surrounding their practices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Rise of the 'Didi Bhaiya' Culture&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The allure of a high-paying tech job, especially in FAANG companies, is undeniable. Capitalizing on this aspiration, many influencers have crafted a narrative: "I cracked FAANG, so can you." They offer courses, bootcamps, and mentorship programs, often accompanied by thumbnails boasting "50 LPA in 6 months" or "Crack FAANG with this roadmap."&lt;/p&gt;

&lt;p&gt;However, a deeper dive reveals a more complex picture. Many of these influencers had brief stints in these companies, some not even completing a year. Their rapid shift from developers to educators raises questions about their depth of experience and the authenticity of their teachings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Criticism from the Tech Community&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The tech community, particularly on platforms like Reddit, has been vocal about the pitfalls of this trend. A user on r/Btechtards lamented:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"These bootcamps and tech influencers destroyed the reputation of Indian developers... Instead of actual contribution, people started adding comments in projects." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Another user highlighted the superficiality of the content:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"DSA/FAANG is becoming just another JEE of young adults... everyone wants to just grind Leetcode without delving deeply into the problem." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Such sentiments underscore a growing disillusionment with the commodification of tech education.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Business Model: Selling Dreams&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The financial aspect cannot be ignored. With courses priced between ₹5,000 to ₹50,000, and a vast audience base, the revenue generated is substantial. A discussion on r/developersIndia estimated:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"They are easily making 5-6 crores each course considering the scale." &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This monetization of aspirations, especially targeting students from tier-2 and tier-3 colleges, has been likened to modern-day pyramid schemes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Impact on the IT Sector&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The repercussions are multifaceted:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dilution of Skillset&lt;/strong&gt;: Emphasis on rote learning and shortcut methods undermines genuine understanding, leading to a workforce ill-prepared for real-world challenges.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Erosion of Trust&lt;/strong&gt;: Employers become skeptical of candidates who have undergone such courses, questioning the authenticity of their skills.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mental Health Concerns&lt;/strong&gt;: Unrealistic expectations set by these influencers can lead to stress, burnout, and a sense of inadequacy among aspirants.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Voices of Reason&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amidst the cacophony, some influencers maintain integrity. Educators like Abdul Bari and platforms like FreeCodeCamp continue to offer quality content without resorting to sensationalism. Their focus remains on genuine learning rather than capitalizing on trends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The 'Didi Bhaiya Gang' phenomenon serves as a cautionary tale about the perils of commodifying education. While democratizing knowledge is commendable, it must not come at the cost of authenticity and depth. Aspiring developers should approach such offerings with a critical eye, prioritizing genuine learning over flashy promises.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommendations&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For Learners&lt;/strong&gt;: Prioritize platforms and educators with a track record of quality content. Engage in communities that value depth over shortcuts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For Employers&lt;/strong&gt;: Implement rigorous assessment methods to gauge genuine skills, moving beyond certifications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;For Influencers&lt;/strong&gt;: Embrace transparency about one's experience and avoid setting unrealistic expectations.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>Brain4j: Wait, Java Finally Has a Brain?</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Fri, 16 May 2025 05:54:25 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/brain4j-wait-java-finally-has-a-brain-29a2</link>
      <guid>https://forem.com/javafullstackdev/brain4j-wait-java-finally-has-a-brain-29a2</guid>
      <description>&lt;p&gt;Oh, look—&lt;strong&gt;Java&lt;/strong&gt; decided to join the AI party! And no, it’s not just another half-baked wrapper around TensorFlow that makes you question your life choices. Meet &lt;strong&gt;Brain4j&lt;/strong&gt;, a &lt;em&gt;supposedly&lt;/em&gt; functional, open-source machine learning framework &lt;em&gt;for Java developers who refuse to switch to Python like sensible people&lt;/em&gt;.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Hold Up—Java Can Do AI Now?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Yes, apparently. While the rest of the world was busy worshipping at the altar of Python and PyTorch, some brave (or stubborn) souls decided: &lt;em&gt;"Hey, what if we made AI in Java without summoning Cthulhu?"&lt;/em&gt; And thus, Brain4j was born.  &lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;"Features" (Because Every Framework Needs a Sales Pitch)&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Neural Networks That Don’t Require a PhD&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feedforward nets? Check.
&lt;/li&gt;
&lt;li&gt;CNNs and RNNs? Sure, why not.
&lt;/li&gt;
&lt;li&gt;Actual documentation? &lt;em&gt;Let’s not get carried away.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Classic ML Algorithms (For When You Miss 2010)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KNN, SVM, Decision Trees—because sometimes you just want to &lt;em&gt;pretend&lt;/em&gt; it’s not all about deep learning.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;NLP Tools (Because Chatbots Won’t Write Themselves)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tokenization, stemming, sentiment analysis—so your Java app can finally understand passive-aggressive emails.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;GPU Acceleration (If You’re Fancy)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Because waiting 12 hours for a model to train on your CPU is &lt;em&gt;so&lt;/em&gt; last decade.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;"Enterprise-Ready" (Read: Boring but Stable)&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Works with Spring, Jakarta EE, and other frameworks your corporate overlords demand.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World Uses (Or: Why You Should Care)&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Predictive Analytics&lt;/strong&gt; – Because guessing the stock market in Java is &lt;em&gt;definitely&lt;/em&gt; a good idea.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Computer Vision&lt;/strong&gt; – Find cats in images, but with &lt;em&gt;type safety&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fraud Detection&lt;/strong&gt; – Catch hackers before they ask, &lt;em&gt;"Why are you using Java for ML?"&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;"Getting Started" (A.K.A. Here’s Where the Pain Begins)&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add the Dependency (If Maven Doesn’t Break First)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;   &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.brain4j&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;brain4j-core&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
       &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Assuming it exists --&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build a Neural Net (Because Hello World is Too Mainstream)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;   &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.brain4j.nn.Network&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.brain4j.nn.layers.DenseLayer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;WhyAmIDoingThis&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
           &lt;span class="nc"&gt;Network&lt;/span&gt; &lt;span class="n"&gt;network&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Network&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
           &lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addLayer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DenseLayer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"relu"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Input&lt;/span&gt;
           &lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addLayer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DenseLayer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"relu"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;  &lt;span class="c1"&gt;// Hidden (like your motivation)&lt;/span&gt;
           &lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addLayer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;DenseLayer&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"sigmoid"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// Output (probably wrong)&lt;/span&gt;

           &lt;span class="kt"&gt;double&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="o"&gt;};&lt;/span&gt; &lt;span class="c1"&gt;// Your "data"&lt;/span&gt;
           &lt;span class="kt"&gt;double&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;predict&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Pray.&lt;/span&gt;
           &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Prediction: "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Probably NaN.&lt;/span&gt;
       &lt;span class="o"&gt;}&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Pros (Yes, There Are Some)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;✅ &lt;strong&gt;No Python Bridges&lt;/strong&gt; – Because JNI is &lt;em&gt;totally&lt;/em&gt; fun.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Lightweight&lt;/strong&gt; – Unlike your dependency tree in a Spring Boot app.&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Open-Source&lt;/strong&gt; – So you can fix it yourself when it breaks.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Cons (Let’s Be Real Here)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;❌ &lt;strong&gt;Community? What Community?&lt;/strong&gt; – Hope you like debugging alone.&lt;br&gt;&lt;br&gt;
❌ &lt;strong&gt;"But TensorFlow…"&lt;/strong&gt; – Yeah, good luck competing with Google’s infinite money.&lt;br&gt;&lt;br&gt;
❌ &lt;strong&gt;Java + AI = ???&lt;/strong&gt; – Some things just weren’t meant to be.  &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Final Verdict: Should You Use It?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you’re a &lt;strong&gt;Java dev with a death wish&lt;/strong&gt; or just &lt;em&gt;really&lt;/em&gt; hate Python, Brain4j might be your new best friend. Otherwise? Maybe just… use Python?  &lt;/p&gt;

&lt;p&gt;But hey, at least now Java has a &lt;em&gt;brain&lt;/em&gt;. Sort of.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Brain4j exists. Use it if you enjoy pain, type safety, or both. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>discuss</category>
    </item>
    <item>
      <title>🧱 How to Build a Complex Spring Boot Backend (So You Stop Being Jobless)</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sun, 04 May 2025 06:34:20 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/how-to-build-a-complex-spring-boot-backend-so-you-stop-being-jobless-1o98</link>
      <guid>https://forem.com/javafullstackdev/how-to-build-a-complex-spring-boot-backend-so-you-stop-being-jobless-1o98</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe99f3b1grayygp4y64b4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe99f3b1grayygp4y64b4.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So you’ve spent months polishing your resume, applying to every "Java Backend Engineer" job on LinkedIn, and still... crickets. Maybe it’s time to face the truth: &lt;strong&gt;your Spring Boot project is just another to-do list API&lt;/strong&gt;. Let’s fix that, shall we?&lt;/p&gt;

&lt;p&gt;This blog is your brutally honest roadmap to build a &lt;strong&gt;real&lt;/strong&gt;, &lt;strong&gt;complex&lt;/strong&gt;, &lt;strong&gt;production-worthy backend project&lt;/strong&gt; using Spring Boot. Not a tutorial for kids. This one’s for future CTOs.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fycycx54l4m0ooa9iryt8.jpg" alt="Image description" width="800" height="800"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🚀 Phase 1: Spring Boot Fundamentals (Yes, Actually Learn It This Time)
&lt;/h2&gt;

&lt;p&gt;Before you dream about microservices and Kubernetes, at least understand what &lt;code&gt;@RestController&lt;/code&gt; does without Googling it every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ What You Need to Know
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;REST APIs using &lt;code&gt;@RestController&lt;/code&gt;, DTOs, request validation&lt;/li&gt;
&lt;li&gt;Dependency Injection (yes, &lt;code&gt;@Autowired&lt;/code&gt; isn’t magic)&lt;/li&gt;
&lt;li&gt;YAML configs and multiple profiles like &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;prod&lt;/code&gt; (if you’re still hardcoding URLs, we need to talk)&lt;/li&gt;
&lt;li&gt;Maven or Gradle — pick one and stop crying&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🛠 &lt;strong&gt;Tools&lt;/strong&gt;: Postman, Spring Boot DevTools, and enough caffeine to replace your social life.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Phase 2: Talk to the Damn Database
&lt;/h2&gt;

&lt;p&gt;Your app doesn’t need to store data in a List forever. Get serious.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Learn JPA + Hibernate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Relationships: &lt;code&gt;@OneToMany&lt;/code&gt;, not one-to-regret&lt;/li&gt;
&lt;li&gt;JPQL for complex queries (SQL is not a dirty word)&lt;/li&gt;
&lt;li&gt;Pagination with &lt;code&gt;Pageable&lt;/code&gt;, not &lt;code&gt;findAll()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;DTO mapping for sanity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🧠 Bonus: Use Flyway or Liquibase. Stop manually altering tables like it’s 2010.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔐 Phase 3: Stop Building Insecure Toy Apps
&lt;/h2&gt;

&lt;p&gt;If your API exposes everything to everyone, congrats — you're building a hacker's dream.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Security You Can’t Ignore
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JWT-based Authentication/Authorization&lt;/li&gt;
&lt;li&gt;Role-Based Access Control (RBAC)&lt;/li&gt;
&lt;li&gt;CSRF protection, CORS config&lt;/li&gt;
&lt;li&gt;Optional Flex: OAuth2 with Google, GitHub, or Keycloak&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pro tip: Don't leave &lt;code&gt;/admin&lt;/code&gt; open just to test it. Recruiters will test your GitHub and silently judge you.&lt;/p&gt;




&lt;h2&gt;
  
  
  📦 Phase 4: Write Real Business Logic
&lt;/h2&gt;

&lt;p&gt;Your service layer should do more than just "return repo.findAll()".&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Business Layer Like a Pro
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@Service&lt;/code&gt; classes handle real-world logic&lt;/li&gt;
&lt;li&gt;Centralized error handling with &lt;code&gt;@ControllerAdvice&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Input validation using &lt;code&gt;@Valid&lt;/code&gt;, not &lt;code&gt;if(name==null)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Apply some DDD (no, it’s not a disease)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Phase 5: Tests — The Adulting Part
&lt;/h2&gt;

&lt;p&gt;If your excuse is "it works on my machine," you're not ready.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Test Everything
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;JUnit + Mockito for unit tests&lt;/li&gt;
&lt;li&gt;Testcontainers for real DBs in tests&lt;/li&gt;
&lt;li&gt;WebTestClient or MockMvc for controller tests&lt;/li&gt;
&lt;li&gt;WireMock to mock those flaky external APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let your tests fail before your interviews do.&lt;/p&gt;




&lt;h2&gt;
  
  
  📡 Phase 6: Talk to Other Services (Without Crying)
&lt;/h2&gt;

&lt;p&gt;Your app needs to interact with others — don’t be socially awkward like your LinkedIn headline.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ WebClient &amp;amp; Resilience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use non-blocking WebClient&lt;/li&gt;
&lt;li&gt;Retry logic, timeouts, circuit breakers with Resilience4j&lt;/li&gt;
&lt;li&gt;Handle failures like a champ, not with &lt;code&gt;Thread.sleep(5000)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Phase 7: Be Asynchronous (Like That One Guy Who Never Replies)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Messaging Queues
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kafka or RabbitMQ for async processing&lt;/li&gt;
&lt;li&gt;Spring Cloud Stream makes life easy&lt;/li&gt;
&lt;li&gt;Dead Letter Queues (because things &lt;em&gt;will&lt;/em&gt; fail)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re still using &lt;code&gt;@Async&lt;/code&gt;, it’s time to grow up.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⛓️ Phase 8: Microservices (The Real Kind)
&lt;/h2&gt;

&lt;p&gt;Not "I have 3 controllers in 3 folders" microservices — the actual distributed system kind.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Microservice Communication
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Feign clients, WebClient, Eureka&lt;/li&gt;
&lt;li&gt;Centralized config with Spring Cloud Config&lt;/li&gt;
&lt;li&gt;Load balancing, service discovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just don’t forget: monoliths aren't evil if you don’t understand microservices yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  📂 Phase 9: Modular Architecture (No More God Class)
&lt;/h2&gt;

&lt;p&gt;Split your app into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;auth-service&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;document-service&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;billing-service&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;notification-service&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use Maven multi-modules or Gradle composite builds. Your future teammates will thank you — if you ever get a job.&lt;/p&gt;




&lt;h2&gt;
  
  
  ☁️ Phase 10: Deploy Like a Legend
&lt;/h2&gt;

&lt;p&gt;You want to work at a tech company but can’t Dockerize your app? Come on.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ DevOps Stuff
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Docker multi-stage builds&lt;/li&gt;
&lt;li&gt;Docker Compose for local setup&lt;/li&gt;
&lt;li&gt;Kubernetes for the real world (Minikube to start)&lt;/li&gt;
&lt;li&gt;Helm charts if you’re serious&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Observability
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Logs with Logback (JSON format, pls)&lt;/li&gt;
&lt;li&gt;Metrics with Micrometer + Prometheus&lt;/li&gt;
&lt;li&gt;Tracing with OpenTelemetry + Jaeger&lt;/li&gt;
&lt;li&gt;Spring Boot Actuator for health checks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Project Idea: Build Something That Screams "Hire Me"
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔥 AI-Powered Legal Document SaaS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PDF upload and parsing&lt;/li&gt;
&lt;li&gt;JWT + Keycloak auth&lt;/li&gt;
&lt;li&gt;OpenAI integration for summarization&lt;/li&gt;
&lt;li&gt;Kafka for async&lt;/li&gt;
&lt;li&gt;Stripe for billing&lt;/li&gt;
&lt;li&gt;Spring Boot Admin dashboard&lt;/li&gt;
&lt;li&gt;Microservices + Docker + K8s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now &lt;em&gt;that&lt;/em&gt; is a portfolio project. Not another “BookStore API with CRUD.”&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Still Jobless?
&lt;/h2&gt;

&lt;p&gt;Listen. If you're:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Doing copy-paste Stack Overflow development&lt;/li&gt;
&lt;li&gt;Building CRUD apps since 2021&lt;/li&gt;
&lt;li&gt;Thinking “microservices” means multiple classes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then yes, you're still jobless — and you'll stay that way unless you &lt;strong&gt;level up&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  💪 Final Words: You Got This
&lt;/h2&gt;

&lt;p&gt;Building a complex Spring Boot project isn’t easy — but neither is sitting jobless, pretending you're "waiting for the right opportunity."&lt;/p&gt;

&lt;p&gt;📢 Get off your lazy backend, open IntelliJ, and &lt;strong&gt;build something that scares you&lt;/strong&gt;. When you're done, deploy it, document it, open-source it.&lt;/p&gt;

&lt;p&gt;And then? Watch those recruiters slide into your inbox like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hi, loved your project. Are you open to opportunities?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You’re welcome.&lt;/p&gt;

</description>
      <category>java</category>
      <category>springboot</category>
      <category>backenddevelopment</category>
      <category>career</category>
    </item>
    <item>
      <title>When Kafka "Ate" My Weekend: Lessons from the Trenches 🎢</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Tue, 29 Apr 2025 06:42:19 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/when-kafka-ate-my-weekend-lessons-from-the-trenches-3ccj</link>
      <guid>https://forem.com/javafullstackdev/when-kafka-ate-my-weekend-lessons-from-the-trenches-3ccj</guid>
      <description>&lt;p&gt;You know that moment when you push your code to production, &lt;em&gt;lean back&lt;/em&gt;, and wait for Slack to explode?&lt;br&gt;&lt;br&gt;
Yeah... that was me last year, all thanks to a &lt;em&gt;tiny&lt;/em&gt; misconfigured Kafka topic.&lt;/p&gt;

&lt;p&gt;Long story short:&lt;br&gt;&lt;br&gt;
Messages were flying everywhere except where they needed to go. Consumers were confused, partitions were misaligned, and I spent my Saturday night debugging with the comforting glow of system logs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're working with Kafka and Spring Boot, this story is for you.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Let's talk about the &lt;em&gt;hard-earned&lt;/em&gt; lessons that textbooks &lt;em&gt;won't&lt;/em&gt; teach you. 💬&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 Lesson 1: Topics Are Not "Set and Forget"
&lt;/h2&gt;

&lt;p&gt;When creating Kafka topics, I used to think:&lt;br&gt;&lt;br&gt;
&lt;em&gt;"It’s just a name and some partitions, right? What could go wrong?"&lt;/em&gt;&lt;br&gt;&lt;br&gt;
(Answer: &lt;strong&gt;Everything.&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Always define &lt;strong&gt;replication factor&lt;/strong&gt; wisely. No one likes losing messages because a single broker took a nap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-create topics&lt;/strong&gt; where possible. Auto-creation sounds cool until it &lt;em&gt;isn't configured properly&lt;/em&gt; and your app fails silently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Naming matters&lt;/strong&gt; — clear, consistent naming saves you (and your team) headaches six months later.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚙️ Lesson 2: Tune Your Consumer Settings Early
&lt;/h2&gt;

&lt;p&gt;Kafka consumers are like hungry toddlers:&lt;br&gt;&lt;br&gt;
If you don't &lt;em&gt;feed&lt;/em&gt; (configure) them properly, expect tantrums (outages).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set a &lt;strong&gt;reasonable &lt;code&gt;max.poll.records&lt;/code&gt;&lt;/strong&gt; — too high = memory issues, too low = bad throughput.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle retries carefully&lt;/strong&gt;. Infinite retries sound safe until you end up with a never-ending zombie message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor lag&lt;/strong&gt; aggressively. Lag today is downtime tomorrow.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 Lesson 3: Don't Ignore Error Handling
&lt;/h2&gt;

&lt;p&gt;The first time our consumer threw an exception, guess what we did?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Logged it... and moved on.&lt;/strong&gt; 🙃&lt;/p&gt;

&lt;p&gt;(Meanwhile, thousands of broken messages piled up in the background.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a &lt;strong&gt;Dead Letter Topic (DLT)&lt;/strong&gt; strategy — not optional, mandatory.&lt;/li&gt;
&lt;li&gt;Implement &lt;strong&gt;custom error handlers&lt;/strong&gt; to gracefully process (or skip) bad messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert on failures&lt;/strong&gt; — not just when services die, but when &lt;em&gt;patterns&lt;/em&gt; of failure emerge.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧹 Lesson 4: Clean Up After Yourself
&lt;/h2&gt;

&lt;p&gt;Old topics don't die; they linger... and cause confusion, increase storage costs, and attract blame during incidents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Tips:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set &lt;strong&gt;&lt;code&gt;retention.ms&lt;/code&gt;&lt;/strong&gt; appropriately for each topic.&lt;/li&gt;
&lt;li&gt;Periodically &lt;strong&gt;audit and delete&lt;/strong&gt; unused topics.&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;naming conventions&lt;/strong&gt; that make deprecation obvious (&lt;code&gt;*_deprecated&lt;/code&gt;, anyone?).&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  💬 Real Talk: What Separates Juniors from Seniors?
&lt;/h1&gt;

&lt;p&gt;Juniors set up Kafka topics and celebrate when the consumer reads a message.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Seniors know&lt;/strong&gt; that &lt;em&gt;production-readiness&lt;/em&gt; is about &lt;strong&gt;what happens when things go wrong.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Handling failures, monitoring lag, preparing for scaling, documenting quirks — that’s the real backend craftsmanship.&lt;/p&gt;




&lt;h1&gt;
  
  
  I'd love to hear from you! 🎤
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Have you had your own Kafka horror story?
&lt;/li&gt;
&lt;li&gt;What’s the &lt;em&gt;smallest mistake&lt;/em&gt; that caused the &lt;em&gt;biggest chaos&lt;/em&gt; in your system?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 Drop your war stories or tips in the comments. Let’s help each other build better, more resilient systems. 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>productivity</category>
    </item>
    <item>
      <title>What I Wish I Knew About Databases as an Experienced Java Backend Developer"</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sat, 26 Apr 2025 06:58:30 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/what-i-wish-i-knew-about-databases-as-an-experienced-java-backend-developer-2e5e</link>
      <guid>https://forem.com/javafullstackdev/what-i-wish-i-knew-about-databases-as-an-experienced-java-backend-developer-2e5e</guid>
      <description>&lt;p&gt;Hey backend champs,&lt;br&gt;&lt;br&gt;
If you're like me — a Java backend dev with a few battle scars — you probably thought for a while:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Databases? Easy. Just throw Hibernate at it and pray."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Spoiler alert: &lt;strong&gt;the database doesn't care about your prayers.&lt;/strong&gt; It only cares about &lt;strong&gt;how you design, query, and treat it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Today, I’m unpacking the &lt;strong&gt;hard lessons&lt;/strong&gt; databases taught me — usually &lt;em&gt;after&lt;/em&gt; they broke stuff in production.&lt;br&gt;&lt;br&gt;
Buckle up. 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  💥 Act 1: ORMs Are Cool... Until They're Not
&lt;/h2&gt;

&lt;p&gt;Early on, Hibernate felt like magic.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;save()&lt;/code&gt;: boom, persisted!
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;findAll()&lt;/code&gt;: boom, data!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But after enough &lt;strong&gt;production incidents&lt;/strong&gt; (and therapy sessions), I learned:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Understand the SQL your ORM generates.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
That one innocent-looking &lt;code&gt;.findAll()&lt;/code&gt;? It could secretly create a 3-way join and fetch 10 million rows.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;N+1 Problem Is Real and It Will Ruin You.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Every unoptimized lazy fetch means &lt;em&gt;one extra DB query per record&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
Congratulations, your app now makes &lt;strong&gt;4000 queries for a single page load&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Custom queries are your friends.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Sometimes, it's faster and safer to write a clean &lt;code&gt;@Query&lt;/code&gt; with JPQL/SQL instead of trusting Hibernate's black magic.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 Act 2: Indexes Aren't Just for Show-Offs
&lt;/h2&gt;

&lt;p&gt;True story:&lt;br&gt;&lt;br&gt;
Once, we had a critical API that took &lt;strong&gt;11 seconds&lt;/strong&gt; to respond.&lt;br&gt;&lt;br&gt;
Turned out — no index on the &lt;code&gt;email&lt;/code&gt; field we were querying.&lt;/p&gt;

&lt;p&gt;🥲 One index later? 20 milliseconds. Life-changing.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Lesson:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn how indexes actually work (B-trees, hash indexes, etc.)
&lt;/li&gt;
&lt;li&gt;Profile your slow queries (&lt;code&gt;EXPLAIN ANALYZE&lt;/code&gt; is your best friend)
&lt;/li&gt;
&lt;li&gt;Don't sprinkle indexes everywhere — they speed up reads but slow down writes!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔥 Act 3: Transactions Are Like Fire — Handle With Respect
&lt;/h2&gt;

&lt;p&gt;Ever seen a backend system stuck with 700 open database connections?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;I have.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Cause? Someone forgot to close a transaction properly. (No, it wasn't me. Yes, it was my teammate. Yes, it could’ve been me.)&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Wrap critical operations in transactions manually when needed.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Mind your isolation levels:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SERIALIZABLE is safe but slow.
&lt;/li&gt;
&lt;li&gt;READ_COMMITTED is usually fine.
&lt;/li&gt;
&lt;li&gt;Never set isolation levels randomly. Know the trade-offs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Rollback is not automatic magic.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you don't configure exception handling correctly, your failed operation might still commit weird partial data.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 Act 4: Data Modeling = Engineering, Not Guesswork
&lt;/h2&gt;

&lt;p&gt;Bad DB design is like bad API design: &lt;strong&gt;you'll pay later.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
(And trust me, DB refactoring after 2 years is a pain you don't want.)&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Normalize where needed, denormalize where needed.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Think about growth:&lt;/strong&gt; Will this table hit 1000 rows or 10 million?&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Plan for migrations from day 1.&lt;/strong&gt; Write liquibase/flyway scripts — don't manually update prod DBs!&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Understand different DB paradigms:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RDBMS (Postgres, MySQL) — for strong consistency
&lt;/li&gt;
&lt;li&gt;NoSQL (MongoDB, DynamoDB) — for flexibility and scale
&lt;/li&gt;
&lt;li&gt;Pick what suits your data, not what’s trendy.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Final Thought: DBs Deserve Your Love Too
&lt;/h2&gt;

&lt;p&gt;As Java backend devs, it’s easy to obsess over microservices, fancy patterns, and frameworks.&lt;br&gt;&lt;br&gt;
But at the end of the day?&lt;br&gt;&lt;br&gt;
&lt;strong&gt;99% of apps exist to shove and fetch data from a database.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
That’s it.&lt;/p&gt;

&lt;p&gt;A fast, resilient, well-modeled database is the hidden engine behind every "scalable" system you admire.&lt;/p&gt;

&lt;p&gt;And trust me — it feels &lt;strong&gt;damn good&lt;/strong&gt; when your app is fast not because of some fancy cache hack, but because you respected your database from Day 1. 🧡&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>System Design: The Java Backend Skill No One Warned Me About (Until It Was 2AM and Everything Was On Fire)</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sat, 26 Apr 2025 06:50:46 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/system-design-the-java-backend-skill-no-one-warned-me-about-until-it-was-2am-and-everything-was-4869</link>
      <guid>https://forem.com/javafullstackdev/system-design-the-java-backend-skill-no-one-warned-me-about-until-it-was-2am-and-everything-was-4869</guid>
      <description>&lt;p&gt;Hey fellow Java backend warriors,&lt;br&gt;&lt;br&gt;
Let’s get real for a second:&lt;br&gt;&lt;br&gt;
If you thought being a "good developer" meant writing clean code and passing unit tests — well, &lt;strong&gt;so did I&lt;/strong&gt;. 😅&lt;/p&gt;

&lt;p&gt;Until I learned (the hard way) that &lt;strong&gt;bad system design&lt;/strong&gt; doesn’t just make things slower.&lt;br&gt;&lt;br&gt;
It turns your perfectly working app into a &lt;strong&gt;dumpster fire&lt;/strong&gt; under real-world traffic.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Act 1: When "Good Code" Isn't Enough
&lt;/h2&gt;

&lt;p&gt;Early in my career, I was the "clean code" guy.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Followed SOLID principles? ✅
&lt;/li&gt;
&lt;li&gt;Perfect 90%+ unit test coverage? ✅
&lt;/li&gt;
&lt;li&gt;Java classes so well-structured they deserved museum space? ✅
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And yet...&lt;br&gt;&lt;br&gt;
🚨 Production outages.&lt;br&gt;&lt;br&gt;
🚨 Crashes under load.&lt;br&gt;&lt;br&gt;
🚨 Angry Slack messages from ops at 2AM.&lt;/p&gt;

&lt;p&gt;Turns out, no one cares how pretty your code is if the system &lt;strong&gt;can't handle scale&lt;/strong&gt;, &lt;strong&gt;fail gracefully&lt;/strong&gt;, or &lt;strong&gt;evolve without tears&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;System design isn’t about "looking smart in whiteboard interviews."&lt;br&gt;&lt;br&gt;
It's about &lt;strong&gt;building systems that don't collapse the first time they meet the real world.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ Act 2: What System Design Actually Teaches You
&lt;/h2&gt;

&lt;p&gt;Here’s what &lt;strong&gt;real-world system design&lt;/strong&gt; forced me to learn — &lt;em&gt;after&lt;/em&gt; the disasters:&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Think Beyond Your Code:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your service is just &lt;em&gt;one&lt;/em&gt; piece in a giant, angry distributed system.
&lt;/li&gt;
&lt;li&gt;Networks fail. Databases get slow. APIs timeout.
&lt;/li&gt;
&lt;li&gt;If your system isn't designed to expect failure, it's doomed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Understand Trade-offs:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can’t have low latency, high consistency, and infinite availability all at once. (Pick two.)
&lt;/li&gt;
&lt;li&gt;Every architecture choice — queues, caches, DB sharding, replication — has a cost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Design for Scale Early (But Not Prematurely):&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No one’s saying you need Kafka for your two-user app.
&lt;/li&gt;
&lt;li&gt;But maybe think twice before hardcoding that “single-threaded everything” logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Plan for Change:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Today it's a monolith.
&lt;/li&gt;
&lt;li&gt;Tomorrow someone’s asking for "easy microservice extraction" while sipping coffee like it's NBD.
&lt;/li&gt;
&lt;li&gt;Good system design &lt;em&gt;anticipates&lt;/em&gt; growth, without locking you into nightmares.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚒 Act 3: Real Lessons I Paid for With Sleep
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Statelessness&lt;/strong&gt; isn't a buzzword. It’s how your service survives container restarts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt; saves you more money than arguing with AWS support ever will.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backpressure&lt;/strong&gt; is the difference between "graceful degradation" and "entire system explodes."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data modeling&lt;/strong&gt; isn't sexy, but a wrong DB schema will haunt you longer than your worst ex.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous messaging&lt;/strong&gt; is your best friend — when your system needs to &lt;em&gt;bend&lt;/em&gt;, not &lt;em&gt;break&lt;/em&gt;, under load.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Final Thought: System Design = Career Moat
&lt;/h2&gt;

&lt;p&gt;Being a senior Java developer isn't just about knowing Spring Boot annotations or mastering JPA queries.&lt;/p&gt;

&lt;p&gt;It’s about &lt;strong&gt;seeing the whole battlefield&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Where the bottlenecks will appear
&lt;/li&gt;
&lt;li&gt;Where the risks are hiding
&lt;/li&gt;
&lt;li&gt;How to make the system &lt;em&gt;boring&lt;/em&gt; in the best way possible (because boring systems are reliable)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good system design doesn't just make apps survive.&lt;br&gt;&lt;br&gt;
It makes &lt;strong&gt;teams faster&lt;/strong&gt;, &lt;strong&gt;businesses stronger&lt;/strong&gt;, and &lt;strong&gt;you indispensable&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;What was &lt;em&gt;your&lt;/em&gt; "oh no, we should have thought about this earlier" moment in system design?  &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Logs Saved My Career (But Only After They Made Me Cry)</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sat, 26 Apr 2025 06:47:06 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/logs-saved-my-career-but-only-after-they-made-me-cry-c3b</link>
      <guid>https://forem.com/javafullstackdev/logs-saved-my-career-but-only-after-they-made-me-cry-c3b</guid>
      <description>&lt;p&gt;Hey backend warriors,&lt;br&gt;&lt;br&gt;
Let’s talk about something unsexy but utterly life-saving: &lt;strong&gt;logs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you’re anything like younger me, you probably thought:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Eh, logs are just there to debug stuff. I’ll sprinkle a few console.log()s and call it a day."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Well, my friends, let me tell you about the night I stared into the abyss... and the abyss stared back, completely &lt;strong&gt;logless&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  📜 Act 1: Logging Like a Rookie
&lt;/h2&gt;

&lt;p&gt;First real production system I worked on?&lt;br&gt;&lt;br&gt;
I wrote logs like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Starting process...
Process finished.
Something went wrong.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No context. No IDs. No timestamps. No hope.&lt;/p&gt;

&lt;p&gt;When the system crashed at 2AM, all I had was a vague "Something went wrong" sandwiched between two lies ("Starting process" and "Process finished").&lt;br&gt;&lt;br&gt;
I felt like a detective solving a crime where the only clue was "Trust me, it was bad."&lt;/p&gt;




&lt;h2&gt;
  
  
  🚒 Act 2: When Bad Logs Meet Bad Days
&lt;/h2&gt;

&lt;p&gt;Fast forward to a critical outage:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1000+ users stuck in checkout flows
&lt;/li&gt;
&lt;li&gt;Alarms blaring
&lt;/li&gt;
&lt;li&gt;CEO asking for updates every 5 minutes
&lt;/li&gt;
&lt;li&gt;Me, SSHing into instances like a caffeinated squirrel, looking at useless logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moral of the story?  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If your logs don't tell you &lt;em&gt;who&lt;/em&gt;, &lt;em&gt;what&lt;/em&gt;, &lt;em&gt;when&lt;/em&gt;, and &lt;em&gt;where&lt;/em&gt; — they’re basically just noise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That day, I made a vow.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;No system of mine would ever suffer from bad logs again.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠 Act 3: Logs That Actually Save You
&lt;/h2&gt;

&lt;p&gt;Here’s what I changed (and what YOU should, too):&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Structured Logs, Always:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Forget raw strings. Log JSON. Machines read logs better than humans — let your dashboards parse them.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Correlation IDs Are Mandatory:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tie all logs together across services. Without a correlation ID, debugging microservices is like finding a needle in a haystack... blindfolded.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Context Context Context:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Every log should answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who is the user/client?&lt;/li&gt;
&lt;li&gt;What operation was attempted?&lt;/li&gt;
&lt;li&gt;What system were we talking to?&lt;/li&gt;
&lt;li&gt;What was the result?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ &lt;strong&gt;Error ≠ Stacktrace Only:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Errors should have clean, readable messages. Stacktraces belong in debug mode, not sprayed across prod logs like graffiti.&lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Centralized Logging = Real Observability:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use ELK stack (Elasticsearch + Logstash + Kibana)
&lt;/li&gt;
&lt;li&gt;Or Loki + Grafana if you prefer lightweight
&lt;/li&gt;
&lt;li&gt;Or a managed solution (AWS CloudWatch, Datadog, etc.) if you want less headache&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Final Thought: Logs Aren’t Just Debug Tools
&lt;/h2&gt;

&lt;p&gt;They're &lt;strong&gt;the black box&lt;/strong&gt; of your system.&lt;br&gt;&lt;br&gt;
When (not if) something breaks at 3AM, your logs are the &lt;em&gt;only friend&lt;/em&gt; who can tell you what actually happened — assuming you treated them well.&lt;/p&gt;

&lt;p&gt;Good logs don’t just save your code.&lt;br&gt;&lt;br&gt;
They save &lt;strong&gt;your reputation&lt;/strong&gt;, &lt;strong&gt;your team's sleep&lt;/strong&gt;, and sometimes &lt;strong&gt;your job&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🙌 Your Turn
&lt;/h2&gt;

&lt;p&gt;What’s your worst (or best) logging story?&lt;br&gt;&lt;br&gt;
Ever had a production outage made 10x worse by missing logs? Drop your story below — let's trade battle scars and learn from each other! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Dell Pro AI Studio: The Local AI Wizard We Didn't Know We Needed (Until Firebase Gave Us Cloud FOMO)</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Mon, 14 Apr 2025 12:15:08 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/dell-pro-ai-studio-the-local-ai-wizard-we-didnt-know-we-needed-until-firebase-gave-us-cloud-fomo-253h</link>
      <guid>https://forem.com/javafullstackdev/dell-pro-ai-studio-the-local-ai-wizard-we-didnt-know-we-needed-until-firebase-gave-us-cloud-fomo-253h</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Written by a developer who tried both, cried at both, and now just wants a coffee and a GPU.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🤖 So, What the Heck &lt;em&gt;Is&lt;/em&gt; Dell Pro AI Studio?
&lt;/h2&gt;

&lt;p&gt;Imagine this: you're a developer, minding your own business, struggling to get your LLM chatbot to stop hallucinating about potatoes. Then &lt;em&gt;bam&lt;/em&gt; — Dell walks in like,  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hey buddy, tired of cloud bills that look like your student loans? Here’s a local AI studio that runs on your laptop. You're welcome.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Introducing &lt;strong&gt;Dell Pro AI Studio&lt;/strong&gt; — a toolkit so developer-friendly it might as well come with free snacks. It’s made for Dell AI PCs, which, by the way, have more AI power than that one guy in your team who claims to "know Python" because he once wrote a &lt;code&gt;print("Hello World")&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://codewithnik.gumroad.com/l/java-interview-prep" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;codewithnik.gumroad.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  💻 Local AI? Like, It Runs on &lt;em&gt;My&lt;/em&gt; Machine?
&lt;/h2&gt;

&lt;p&gt;Yes. On &lt;em&gt;your&lt;/em&gt; Dell AI PC. As long as it’s got at least &lt;strong&gt;40 TOPS&lt;/strong&gt; of NPU (that’s "Trillions of Operations Per Second", not "TikToks Of Power Shorts", though Dell missed a branding opportunity there).&lt;/p&gt;

&lt;p&gt;You get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Dell Core Services (basically the stage crew that keeps your AI show running)&lt;/li&gt;
&lt;li&gt;✅ REST APIs à la OpenAI-style (your LLM will feel fancy)&lt;/li&gt;
&lt;li&gt;✅ Pre-trained models like OpenAI-CLIP and Phi-3.5-Mini-Instruct&lt;/li&gt;
&lt;li&gt;✅ PowerShell scripts (for those who love pain)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And all this is done &lt;em&gt;locally&lt;/em&gt;. That’s right — no cloud, no serverless cold starts, no Firebase pricing tier emails that make you question your life decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  🆚 Wait, How’s This Different from Firebase AI Studio?
&lt;/h2&gt;

&lt;p&gt;Great question. Let’s break it down like a tech meme war.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Dell Pro AI Studio&lt;/th&gt;
&lt;th&gt;Firebase AI Studio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🌩️ Runs in the Cloud?&lt;/td&gt;
&lt;td&gt;Nope, it runs on &lt;em&gt;your&lt;/em&gt; machine&lt;/td&gt;
&lt;td&gt;Yes, up in the Google's heaven&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧠 NPU Utilization&lt;/td&gt;
&lt;td&gt;Yes, it flexes your laptop’s AI muscle&lt;/td&gt;
&lt;td&gt;No idea. Probably asks for a TPU you’ll never afford&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⚡ Speed&lt;/td&gt;
&lt;td&gt;Blazing fast (if your machine doesn’t suck)&lt;/td&gt;
&lt;td&gt;Depends on the Firebase mood and your Wi-Fi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔒 Data Privacy&lt;/td&gt;
&lt;td&gt;Local, so &lt;em&gt;you&lt;/em&gt; control the data&lt;/td&gt;
&lt;td&gt;Data takes a road trip to Google’s servers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🧰 Tools&lt;/td&gt;
&lt;td&gt;PowerShell, .NET Runtime, REST APIs&lt;/td&gt;
&lt;td&gt;Firebase console, JavaScript SDKs, and Google magic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🪙 Price&lt;/td&gt;
&lt;td&gt;Free if your laptop already costs a kidney&lt;/td&gt;
&lt;td&gt;Free... until you hit 100 API calls, then boom 💣&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🤖 Personality&lt;/td&gt;
&lt;td&gt;“I’m a Dell. I work offline.”&lt;/td&gt;
&lt;td&gt;“I’m a Firebase. I might ghost you during a deploy.”&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  🛠️ Developer Vibes: What It’s &lt;em&gt;Really&lt;/em&gt; Like to Use
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dell Pro AI Studio&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
You install it. You run it. It doesn’t ask you to sign up for 47 Google services or verify your phone number 6 times. You write your code, your model runs locally, and for once in your life, you feel &lt;em&gt;seen&lt;/em&gt; by your machine.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firebase AI Studio&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
You build an AI assistant. It works. Then you deploy, and now it’s costing $0.0002 per inference. That’s fine... until you go viral. Then Firebase becomes your bank’s favorite subscription.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎯 Real Talk: Who Is Dell Pro AI Studio For?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You're building AI apps and your boss said "No more cloud bills."&lt;/li&gt;
&lt;li&gt;You’re a tinfoil hat privacy freak (love you).&lt;/li&gt;
&lt;li&gt;You want low latency AI on a plane, in a jungle, or your grandma’s house with zero Wi-Fi.&lt;/li&gt;
&lt;li&gt;You bought a Dell XPS and want to feel like it was worth the 2-lakh investment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: It only runs on Dell hardware right now — so if you’re a ThinkPad fan, this ain’t your party.&lt;/p&gt;

&lt;h2&gt;
  
  
  ☕ Final Thoughts From This Sleep-Deprived Developer
&lt;/h2&gt;

&lt;p&gt;Firebase AI Studio is like ordering Uber Eats: convenient, overpriced, and your fries are cold.&lt;br&gt;&lt;br&gt;
Dell Pro AI Studio is like cooking at home with a really sharp knife: local, fast, and a little dangerous if you don’t know what you’re doing.&lt;/p&gt;

&lt;p&gt;If you're serious about edge AI, want to look cool at your next dev meet, or just hate cloud latency, &lt;strong&gt;Dell Pro AI Studio is a game-changer&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
If you prefer dashboards and cloud logging with emojis, &lt;strong&gt;Firebase AI Studio still slaps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But if you ask me?&lt;br&gt;&lt;br&gt;
I'll be here running a chatbot on my laptop — offline — while Firebase emails me:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You've exceeded your free quota for breathing."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;🧑‍💻 &lt;strong&gt;Until next time, stay caffeinated, stay local, and don't forget to commit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Want a React demo using Dell's APIs? Or a script that wraps this whole thing into an app?&lt;br&gt;&lt;br&gt;
Let me know, and I’ll write it before Firebase bills me again.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>career</category>
      <category>news</category>
    </item>
    <item>
      <title>🔐 Spring Security: Using JWT and Basic Auth for Different URL Patterns</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sun, 13 Apr 2025 10:04:47 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/spring-security-using-jwt-and-basic-auth-for-different-url-patterns-1ogd</link>
      <guid>https://forem.com/javafullstackdev/spring-security-using-jwt-and-basic-auth-for-different-url-patterns-1ogd</guid>
      <description>&lt;p&gt;Hello, fellow developers! 👋&lt;br&gt;&lt;br&gt;
If you've ever scratched your head wondering, &lt;em&gt;"How can I use both JWT and Basic Auth in the same Spring Boot application for different URL patterns?"&lt;/em&gt; — you're not alone. This blog post is for &lt;strong&gt;developers&lt;/strong&gt; like you who want to &lt;strong&gt;secure different parts of a Spring Boot app using different authentication mechanisms&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://codewithnik.gumroad.com/l/java-interview-prep" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;codewithnik.gumroad.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
By the end, you'll be able to:

&lt;p&gt;✅ Secure some APIs with Basic Auth&lt;br&gt;&lt;br&gt;
✅ Secure others with JWT&lt;br&gt;&lt;br&gt;
✅ Configure everything cleanly with Spring Security  &lt;/p&gt;

&lt;p&gt;Let’s dive right in!&lt;/p&gt;


&lt;h2&gt;
  
  
  ✨ Why Would You Need Multiple Authentication Types?
&lt;/h2&gt;

&lt;p&gt;There are plenty of real-world use cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public APIs secured via Basic Auth&lt;/strong&gt; (for clients using tools like Postman or curl)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile/web clients using JWT tokens&lt;/strong&gt; for stateless authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Admin endpoints&lt;/strong&gt; that are locked down with Basic Auth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User endpoints&lt;/strong&gt; that use JWT-based login flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of choosing &lt;em&gt;either&lt;/em&gt; JWT &lt;em&gt;or&lt;/em&gt; Basic Auth, Spring Security gives us the power to use &lt;strong&gt;both, tailored to specific URL patterns&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 High-Level Approach
&lt;/h2&gt;

&lt;p&gt;Here’s how we’re going to do it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create two &lt;code&gt;SecurityFilterChain&lt;/code&gt; beans:

&lt;ul&gt;
&lt;li&gt;One for Basic Auth endpoints (&lt;code&gt;/api/admin/**&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;One for JWT-secured endpoints (&lt;code&gt;/api/user/**&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Define an authentication provider for each type.&lt;/li&gt;
&lt;li&gt;Register both configurations with proper &lt;code&gt;@Order&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  📦 Dependencies (Spring Boot 3.x)
&lt;/h2&gt;

&lt;p&gt;Add the following to your &lt;code&gt;pom.xml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-security&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.jsonwebtoken&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jjwt-api&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;0.11.5&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.jsonwebtoken&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jjwt-impl&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;0.11.5&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;runtime&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;io.jsonwebtoken&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;jjwt-jackson&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;0.11.5&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;runtime&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔐 1. Basic Authentication for &lt;code&gt;/api/admin/**&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Let’s start with securing admin APIs using Basic Auth.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="nd"&gt;@Order&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BasicAuthSecurityConfig&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;SecurityFilterChain&lt;/span&gt; &lt;span class="nf"&gt;basicAuthFilterChain&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpSecurity&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;http&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;securityMatcher&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/admin/**"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;authorizeHttpRequests&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;anyRequest&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;authenticated&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;httpBasic&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Customizer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withDefaults&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sessionManagement&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sessionCreationPolicy&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;SessionCreationPolicy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;STATELESS&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;csrf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csrf&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;csrf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;disable&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;UserDetailsService&lt;/span&gt; &lt;span class="nf"&gt;basicUserDetailsService&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;UserDetails&lt;/span&gt; &lt;span class="n"&gt;admin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withUsername&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"admin"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;passwordEncoder&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;encode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"admin123"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
                                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;roles&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ADMIN"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;InMemoryUserDetailsManager&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;admin&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;PasswordEncoder&lt;/span&gt; &lt;span class="nf"&gt;passwordEncoder&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;BCryptPasswordEncoder&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📝 Try accessing:&lt;br&gt;&lt;br&gt;
&lt;code&gt;curl -u admin:admin123 http://localhost:8080/api/admin/dashboard&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧾 2. JWT Authentication for &lt;code&gt;/api/user/**&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;We’ll now secure user APIs using JWTs. First, create a JWT utility class.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔧 JWT Utility Class
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Component&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;JwtUtils&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"mysecretkey"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;generateToken&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Jwts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;builder&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSubject&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setIssuedAt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setExpiration&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;currentTimeMillis&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;86400000&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;signWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Keys&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;hmacShaKeyFor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;secret&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="o"&gt;()))&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;compact&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;extractUsername&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Jwts&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parserBuilder&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setSigningKey&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;secret&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBytes&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseClaimsJws&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getBody&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
                &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getSubject&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;boolean&lt;/span&gt; &lt;span class="nf"&gt;validateToken&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;extractUsername&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧱 JWT Filter
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Component&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;JwtAuthFilter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;OncePerRequestFilter&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Autowired&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;JwtUtils&lt;/span&gt; &lt;span class="n"&gt;jwtUtils&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Autowired&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;UserDetailsService&lt;/span&gt; &lt;span class="n"&gt;jwtUserDetailsService&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Override&lt;/span&gt;
    &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;doFilterInternal&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpServletRequest&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                                    &lt;span class="nc"&gt;HttpServletResponse&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
                                    &lt;span class="nc"&gt;FilterChain&lt;/span&gt; &lt;span class="n"&gt;filterChain&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;ServletException&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;IOException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;authHeader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getHeader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;authHeader&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;authHeader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;startsWith&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Bearer "&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;jwt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;authHeader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jwtUtils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;extractUsername&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jwt&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nc"&gt;SecurityContextHolder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getContext&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getAuthentication&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="nc"&gt;UserDetails&lt;/span&gt; &lt;span class="n"&gt;userDetails&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jwtUserDetailsService&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;loadUserByUsername&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;

                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jwtUtils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;validateToken&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jwt&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
                    &lt;span class="nc"&gt;UsernamePasswordAuthenticationToken&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
                        &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;UsernamePasswordAuthenticationToken&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userDetails&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;userDetails&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getAuthorities&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

                    &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setDetails&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;WebAuthenticationDetailsSource&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;buildDetails&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;

                    &lt;span class="nc"&gt;SecurityContextHolder&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getContext&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;setAuthentication&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
                &lt;span class="o"&gt;}&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;filterChain&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;doFilter&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔐 JWT Security Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="nd"&gt;@Order&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;JwtSecurityConfig&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="nd"&gt;@Autowired&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;JwtAuthFilter&lt;/span&gt; &lt;span class="n"&gt;jwtAuthFilter&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;SecurityFilterChain&lt;/span&gt; &lt;span class="nf"&gt;jwtFilterChain&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;HttpSecurity&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;http&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;securityMatcher&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/api/user/**"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;authorizeHttpRequests&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auth&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;auth&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;anyRequest&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;authenticated&lt;/span&gt;&lt;span class="o"&gt;())&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sessionManagement&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sessionCreationPolicy&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;SessionCreationPolicy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;STATELESS&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addFilterBefore&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jwtAuthFilter&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;UsernamePasswordAuthenticationFilter&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;csrf&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csrf&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;csrf&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;disable&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;UserDetailsService&lt;/span&gt; &lt;span class="nf"&gt;jwtUserDetailsService&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;UserDetails&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;withUsername&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"john"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                               &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;passwordEncoder&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;encode&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"john123"&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
                               &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;roles&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"USER"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
                               &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;InMemoryUserDetailsManager&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🚀 Testing It Out
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧪 Basic Auth
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-u&lt;/span&gt; admin:admin123 http://localhost:8080/api/admin/dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧪 JWT Flow
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Simulate login and generate token (you can hardcode for now).
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;jwt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jwtUtils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;generateToken&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"john"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Access secure API:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &amp;lt;your_token&amp;gt;"&lt;/span&gt; http://localhost:8080/api/user/profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;This dual-authentication strategy is incredibly useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need &lt;strong&gt;backward compatibility&lt;/strong&gt; for legacy clients (Basic Auth)&lt;/li&gt;
&lt;li&gt;You want &lt;strong&gt;modern stateless security&lt;/strong&gt; for SPAs/mobile apps (JWT)&lt;/li&gt;
&lt;li&gt;You’re building &lt;strong&gt;multi-tenant or role-separated services&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Spring Security’s filter chains&lt;/strong&gt; and &lt;code&gt;@Order&lt;/code&gt; mechanism make it super easy to support both.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Security multiple authentication providers&lt;/li&gt;
&lt;li&gt;Spring Boot Basic Auth and JWT together&lt;/li&gt;
&lt;li&gt;Spring Security filter chain for different URL patterns&lt;/li&gt;
&lt;li&gt;Secure REST API with JWT and Basic Auth&lt;/li&gt;
&lt;li&gt;Spring Security custom SecurityFilterChain&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🙋 Need Help?
&lt;/h2&gt;

&lt;p&gt;Got stuck? Want the full source code or a GitHub repo? Drop a comment below or message me on &lt;a href="https://x.com/SahooLabs" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Until next time, happy coding!&lt;br&gt;&lt;br&gt;
&lt;strong&gt;– Your friendly Spring Coach 💻☕&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
    <item>
      <title>Fixing "Package org.springframework.boot Does Not Exist" in Maven</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sun, 13 Apr 2025 09:59:20 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/fixing-package-orgspringframeworkboot-does-not-exist-in-maven-10oe</link>
      <guid>https://forem.com/javafullstackdev/fixing-package-orgspringframeworkboot-does-not-exist-in-maven-10oe</guid>
      <description>&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://codewithnik.gumroad.com/l/java-interview-prep" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;codewithnik.gumroad.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;If you encounter the error &lt;strong&gt;"Package org.springframework.boot does not exist"&lt;/strong&gt; in your Maven-based Spring Boot project, it means Maven cannot resolve Spring Boot dependencies. This issue commonly occurs due to incorrect &lt;strong&gt;Maven configuration, missing repositories, or incompatible dependencies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll explore &lt;strong&gt;why this error happens&lt;/strong&gt; and provide &lt;strong&gt;step-by-step solutions&lt;/strong&gt; to fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Why Does This Error Occur?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The error typically appears when:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Spring Boot dependencies are missing&lt;/strong&gt; in &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incorrect or missing Maven repository&lt;/strong&gt; (Spring repositories not configured).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maven project not properly loaded&lt;/strong&gt; (IDE cache issue).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Incorrect Java or Spring Boot version&lt;/strong&gt; (version mismatch).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network/proxy issues&lt;/strong&gt; (Maven unable to download dependencies).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step-by-Step Fixes&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Verify Spring Boot Dependencies in &lt;code&gt;pom.xml&lt;/code&gt;&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ensure your &lt;code&gt;pom.xml&lt;/code&gt; includes the &lt;strong&gt;Spring Boot Starter Parent&lt;/strong&gt; and required dependencies:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Basic Spring Boot Maven Setup&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;project&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;parent&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-parent&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.2.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- Use latest stable version --&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/parent&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;If Not Using &lt;code&gt;spring-boot-starter-parent&lt;/code&gt;&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;If you’re &lt;strong&gt;not using the Spring Boot Parent POM&lt;/strong&gt;, explicitly define Spring Boot dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-dependencies&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.2.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;type&amp;gt;&lt;/span&gt;pom&lt;span class="nt"&gt;&amp;lt;/type&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;scope&amp;gt;&lt;/span&gt;import&lt;span class="nt"&gt;&amp;lt;/scope&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;2. Check Maven Repositories&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Maven needs access to &lt;strong&gt;Spring repositories&lt;/strong&gt; to download Spring Boot dependencies. Ensure your &lt;code&gt;pom.xml&lt;/code&gt; includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;repositories&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;repository&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;spring-milestones&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Spring Milestones&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;https://repo.spring.io/milestone&lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/repository&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;repository&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;spring-snapshots&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Spring Snapshots&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;https://repo.spring.io/snapshot&lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;snapshots&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;enabled&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/enabled&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/snapshots&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/repository&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/repositories&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;3. Update Maven &amp;amp; Reload Project&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Sometimes, the issue is due to &lt;strong&gt;IDE cache or Maven not syncing properly&lt;/strong&gt;:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;In IntelliJ IDEA&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Right-click on &lt;code&gt;pom.xml&lt;/code&gt; → Maven → Reimport&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File → Invalidate Caches → Restart IDE&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;In Eclipse&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Right-click project → Maven → Update Project&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check "Force Update of Snapshots/Releases"&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Command Line (if using terminal)&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn clean &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(&lt;code&gt;-U&lt;/code&gt; forces Maven to update dependencies)&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;4. Check Java Version Compatibility&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Spring Boot &lt;strong&gt;3.x requires Java 17+&lt;/strong&gt;, while &lt;strong&gt;2.x works with Java 8+&lt;/strong&gt;. Verify:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;In &lt;code&gt;pom.xml&lt;/code&gt;&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;java.version&amp;gt;&lt;/span&gt;17&lt;span class="nt"&gt;&amp;lt;/java.version&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- For Spring Boot 3.x --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Check Installed Java Version&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If using an older Java version, &lt;strong&gt;upgrade JDK&lt;/strong&gt; or &lt;strong&gt;downgrade Spring Boot&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;parent&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-parent&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.7.18&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!-- For Java 8/11 --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/parent&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;5. Fix Network/Proxy Issues&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If Maven cannot download dependencies due to &lt;strong&gt;corporate proxy/firewall&lt;/strong&gt;, configure Maven settings:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Edit &lt;code&gt;~/.m2/settings.xml&lt;/code&gt;&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;settings&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;proxies&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;proxy&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;corporate-proxy&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;active&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/active&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;protocol&amp;gt;&lt;/span&gt;http&lt;span class="nt"&gt;&amp;lt;/protocol&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;host&amp;gt;&lt;/span&gt;proxy.yourcompany.com&lt;span class="nt"&gt;&amp;lt;/host&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;port&amp;gt;&lt;/span&gt;8080&lt;span class="nt"&gt;&amp;lt;/port&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;username&amp;gt;&lt;/span&gt;your-username&lt;span class="nt"&gt;&amp;lt;/username&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;password&amp;gt;&lt;/span&gt;your-password&lt;span class="nt"&gt;&amp;lt;/password&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/proxy&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/proxies&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/settings&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Final Working Example&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Here’s a &lt;strong&gt;complete &lt;code&gt;pom.xml&lt;/code&gt;&lt;/strong&gt; that works with Spring Boot 3.2.0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;project&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;modelVersion&amp;gt;&lt;/span&gt;4.0.0&lt;span class="nt"&gt;&amp;lt;/modelVersion&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;parent&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-parent&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.2.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/parent&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.example&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;demo&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;java.version&amp;gt;&lt;/span&gt;17&lt;span class="nt"&gt;&amp;lt;/java.version&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;repositories&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;repository&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;spring-milestones&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Spring Milestones&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;https://repo.spring.io/milestone&lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/repository&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/repositories&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To fix &lt;strong&gt;"Package org.springframework.boot does not exist"&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;✅ &lt;strong&gt;Check &lt;code&gt;pom.xml&lt;/code&gt;&lt;/strong&gt; for correct Spring Boot dependencies.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Ensure Maven repositories&lt;/strong&gt; are properly configured.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Reload Maven project&lt;/strong&gt; in IDE.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Verify Java version&lt;/strong&gt; compatibility.&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Check network/proxy settings&lt;/strong&gt; if dependencies fail to download.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Following these steps should resolve the issue. If the problem persists, check &lt;strong&gt;Maven logs&lt;/strong&gt; (&lt;code&gt;mvn clean install -X&lt;/code&gt;) for detailed errors.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Further Reading&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/htmlsingle/" rel="noopener noreferrer"&gt;Spring Boot Maven Plugin Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maven.apache.org/settings.html" rel="noopener noreferrer"&gt;Maven Settings Guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Did this solution work for you? Let me know in the comments!&lt;/strong&gt; 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Troubleshooting "Unable to Connect to Azure Key Vault Using Spring Boot" – A Developer's Guide</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sun, 13 Apr 2025 09:55:09 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/troubleshooting-unable-to-connect-to-azure-key-vault-using-spring-boot-a-developers-guide-39e5</link>
      <guid>https://forem.com/javafullstackdev/troubleshooting-unable-to-connect-to-azure-key-vault-using-spring-boot-a-developers-guide-39e5</guid>
      <description>&lt;p&gt;Azure Key Vault is a cloud-based service that helps securely store and manage sensitive information such as secrets, keys, and certificates. When working with Spring Boot, developers often integrate Key Vault to fetch secrets dynamically. However, connection issues can arise due to misconfigurations, authentication problems, or network restrictions.&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://codewithnik.gumroad.com/l/java-interview-prep" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;codewithnik.gumroad.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
In this blog post, we’ll explore common reasons why your Spring Boot application might fail to connect to Azure Key Vault and provide step-by-step solutions to resolve them.

&lt;p&gt;Common Causes of Key Vault Connection Failures&lt;/p&gt;

&lt;p&gt;Before diving into solutions, let’s identify the most frequent causes of connection failures:&lt;/p&gt;

&lt;p&gt;Incorrect Azure Credentials&lt;/p&gt;

&lt;p&gt;Missing or invalid Client ID, Client Secret, or Tenant ID.&lt;/p&gt;

&lt;p&gt;Incorrect Key Vault URL.&lt;/p&gt;

&lt;p&gt;Missing or Incorrect Dependencies&lt;/p&gt;

&lt;p&gt;Using outdated or incompatible Spring Boot Azure libraries.&lt;/p&gt;

&lt;p&gt;Insufficient Permissions in Azure&lt;/p&gt;

&lt;p&gt;The application’s Service Principal lacks access policies in Key Vault.&lt;/p&gt;

&lt;p&gt;Network Restrictions&lt;/p&gt;

&lt;p&gt;Firewall blocking outbound requests.&lt;/p&gt;

&lt;p&gt;Private endpoint misconfiguration.&lt;/p&gt;

&lt;p&gt;Wrong Spring Boot Configuration&lt;/p&gt;

&lt;p&gt;Incorrect application.properties or application.yml setup.&lt;/p&gt;

&lt;p&gt;Step-by-Step Solutions&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify Azure AD Authentication Credentials&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Spring Boot applications typically authenticate with Azure Key Vault using Service Principal credentials (Client ID, Client Secret, Tenant ID). Ensure these are correctly configured:&lt;/p&gt;

&lt;p&gt;Check application.properties&lt;/p&gt;
&lt;h1&gt;
  
  
  Azure Key Vault Configuration
&lt;/h1&gt;

&lt;p&gt;azure.keyvault.uri=&lt;a href="https://your-keyvault-name.vault.azure.net" rel="noopener noreferrer"&gt;https://your-keyvault-name.vault.azure.net&lt;/a&gt;&lt;br&gt;
azure.keyvault.client-id=your-client-id&lt;br&gt;
azure.keyvault.client-secret=your-client-secret&lt;br&gt;
azure.keyvault.tenant-id=your-tenant-id&lt;/p&gt;

&lt;p&gt;Alternative: Using Managed Identity (For Azure-hosted apps)&lt;/p&gt;

&lt;p&gt;If your app runs on Azure App Service or VMs, use Managed Identity instead of explicit credentials:&lt;/p&gt;

&lt;p&gt;azure.keyvault.uri=&lt;a href="https://your-keyvault-name.vault.azure.net" rel="noopener noreferrer"&gt;https://your-keyvault-name.vault.azure.net&lt;/a&gt;&lt;br&gt;
azure.keyvault.managed-identity=true&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure Correct Maven/Gradle Dependencies&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Spring Boot requires the Azure Key Vault Secrets Spring Boot Starter dependency:&lt;/p&gt;

&lt;p&gt;Maven (pom.xml)&lt;/p&gt;

&lt;p&gt;&lt;br&gt;
    com.azure.spring&lt;br&gt;
    azure-spring-boot-starter-keyvault-secrets&lt;br&gt;
    3.14.0 &amp;lt;!-- Check for latest version --&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Gradle (build.gradle)&lt;/p&gt;

&lt;p&gt;implementation 'com.azure.spring:azure-spring-boot-starter-keyvault-secrets:3.14.0'&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Grant Key Vault Access to Your Application&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your Azure AD Service Principal must have Key Vault access policies:&lt;/p&gt;

&lt;p&gt;Go to Azure Portal → Key Vault → Access Policies.&lt;/p&gt;

&lt;p&gt;Click Add Access Policy.&lt;/p&gt;

&lt;p&gt;Select Secret Permissions (e.g., Get, List).&lt;/p&gt;

&lt;p&gt;Under Principal, search for your App Registration (Service Principal).&lt;/p&gt;

&lt;p&gt;Save changes.&lt;/p&gt;

&lt;p&gt;Alternatively, use Azure RBAC (Role-Based Access Control):&lt;/p&gt;

&lt;p&gt;az keyvault set-policy --name YourKeyVaultName --spn YOUR_CLIENT_ID --secret-permissions get list&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check Network &amp;amp; Firewall Settings&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If Key Vault has firewall restrictions, ensure your app’s IP is allowed:&lt;/p&gt;

&lt;p&gt;Go to Key Vault → Networking.&lt;/p&gt;

&lt;p&gt;Allow access from:&lt;/p&gt;

&lt;p&gt;Selected networks (if on-premises/VNet)&lt;/p&gt;

&lt;p&gt;Azure services (if using App Service)&lt;/p&gt;

&lt;p&gt;If using Private Endpoint, verify DNS resolution:&lt;/p&gt;

&lt;p&gt;nslookup your-keyvault-name.vault.azure.net&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Debugging with Spring Boot Logs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Enable debug logging to diagnose issues:&lt;/p&gt;

&lt;p&gt;logging.level.org.springframework=DEBUG&lt;br&gt;
logging.level.com.azure=DEBUG&lt;/p&gt;

&lt;p&gt;Common errors in logs:&lt;/p&gt;

&lt;p&gt;401 Unauthorized → Invalid credentials.&lt;/p&gt;

&lt;p&gt;403 Forbidden → Missing permissions.&lt;/p&gt;

&lt;p&gt;404 Not Found → Wrong Key Vault URL.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Testing Connectivity Manually&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use Azure CLI to verify access:&lt;/p&gt;

&lt;p&gt;az keyvault secret list --vault-name YourKeyVaultName&lt;/p&gt;

&lt;p&gt;If this fails, the issue is authentication or permissions, not Spring Boot.&lt;/p&gt;

&lt;p&gt;Final Working Example&lt;/p&gt;

&lt;p&gt;Here’s a complete application.yml configuration for reference:&lt;/p&gt;

&lt;p&gt;azure:&lt;br&gt;
  keyvault:&lt;br&gt;
    uri: &lt;a href="https://your-keyvault.vault.azure.net" rel="noopener noreferrer"&gt;https://your-keyvault.vault.azure.net&lt;/a&gt;&lt;br&gt;
    client-id: ${AZURE_CLIENT_ID}&lt;br&gt;
    client-secret: ${AZURE_CLIENT_SECRET}&lt;br&gt;
    tenant-id: ${AZURE_TENANT_ID}&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;If your Spring Boot app fails to connect to Azure Key Vault, follow these steps:&lt;/p&gt;

&lt;p&gt;✅ Verify credentials (Client ID, Secret, Tenant ID).&lt;/p&gt;

&lt;p&gt;✅ Check dependencies (correct Maven/Gradle setup).&lt;/p&gt;

&lt;p&gt;✅ Grant permissions in Azure Key Vault.&lt;/p&gt;

&lt;p&gt;✅ Review network/firewall settings.&lt;/p&gt;

&lt;p&gt;✅ Enable debug logs for detailed errors.&lt;/p&gt;

&lt;p&gt;By systematically troubleshooting, you can resolve connection issues and securely retrieve secrets in your Spring Boot application.&lt;/p&gt;

&lt;p&gt;Further Reading&lt;/p&gt;

&lt;p&gt;Azure Key Vault Spring Boot Starter Docs&lt;/p&gt;

&lt;p&gt;Azure Key Vault Best Practices&lt;/p&gt;

&lt;p&gt;Have you faced Key Vault connection issues? Share your experience in the comments! 🚀&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to Configure Port for a Spring Boot Application</title>
      <dc:creator>JavaFullStackDev.in</dc:creator>
      <pubDate>Sun, 13 Apr 2025 09:53:10 +0000</pubDate>
      <link>https://forem.com/javafullstackdev/how-to-configure-port-for-a-spring-boot-application-5gep</link>
      <guid>https://forem.com/javafullstackdev/how-to-configure-port-for-a-spring-boot-application-5gep</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Spring Boot applications run on a default port (8080), but sometimes you need to change it for various reasons, such as avoiding conflicts with other applications, running multiple instances, or security considerations. In this blog, we’ll explore different ways to configure the port for a Spring Boot application.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Configuring Port in &lt;code&gt;application.properties&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;The simplest way to set a custom port is by defining it in the &lt;code&gt;application.properties&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;server.port&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;9090&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will make the application run on port 9090 instead of the default 8080.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Configuring Port in &lt;code&gt;application.yml&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;If you prefer using YAML, you can configure the port in &lt;code&gt;application.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;9090&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just like the properties file, this will ensure the application starts on port 9090.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Setting Port via Command Line Arguments
&lt;/h2&gt;

&lt;p&gt;You can also specify the port when starting the application using a command-line argument:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-jar&lt;/span&gt; myapp.jar &lt;span class="nt"&gt;--server&lt;/span&gt;.port&lt;span class="o"&gt;=&lt;/span&gt;9090
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful when you need to override the port dynamically without modifying configuration files.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Setting Port Using Environment Variables
&lt;/h2&gt;

&lt;p&gt;If you want to configure the port using an environment variable, you can set it like this:&lt;/p&gt;

&lt;h3&gt;
  
  
  On Linux/macOS:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;SERVER_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9090
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  On Windows:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;set &lt;/span&gt;&lt;span class="nv"&gt;SERVER_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;9090
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is useful in cloud deployments or containerized environments where configurations are managed via environment variables.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Configuring Port Programmatically in Java
&lt;/h2&gt;

&lt;p&gt;If you need more flexibility, you can set the port programmatically in your &lt;code&gt;SpringBootApplication&lt;/code&gt; class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.boot.SpringApplication&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.boot.autoconfigure.SpringBootApplication&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.boot.web.server.WebServerFactoryCustomizer&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.boot.web.server.ConfigurableWebServerFactory&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;org.springframework.context.annotation.Bean&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nd"&gt;@SpringBootApplication&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApplication&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;SpringApplication&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MyApplication&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;WebServerFactoryCustomizer&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ConfigurableWebServerFactory&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;webServerFactoryCustomizer&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;factory&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setPort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9090&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach allows dynamic port configuration based on application logic.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Configuring Random Port for Testing
&lt;/h2&gt;

&lt;p&gt;For testing purposes, you might want the application to start on a random port. You can do this by setting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="py"&gt;server.port&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or in YAML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Spring Boot will then assign a random available port at runtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Configuring the port for a Spring Boot application is straightforward and can be done using properties, YAML, command-line arguments, environment variables, or programmatically. Depending on your use case, choose the method that best fits your deployment strategy.&lt;/p&gt;

&lt;p&gt;Do you have any other Spring Boot configuration challenges? Let us know in the comments!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
