সরাসরি প্রধান সামগ্রীতে চলে যান

Allow CSP in Chrome and Firefox and Call Server API in Spring boot Bangla

ঠিক আছে 🔥। আমি তোমার জন্য একটি সম্পূর্ণ README-style document বানাচ্ছি, যেখানে Chrome এবং Firefox দুটোতেই Spring Boot backend-এর জন্য CSP এবং CORS ঠিকভাবে configure করার process step-by-step আছে।


README: CSP & CORS Configuration for Spring Boot (Chrome & Firefox)

Overview

এই document-এ দেখানো হয়েছে কিভাবে:

  1. Spring Boot backend থেকে Content Security Policy (CSP) configure করা যায়।
  2. Spring Boot backend থেকে Cross-Origin Resource Sharing (CORS) allow করা যায়।
  3. Chrome ও Firefox-এ fetch/API calls চালাতে হয় কীভাবে।

⚠️ Important: নিচের setup mostly development/test environment-এর জন্য। Production environment-এ অবশ্যই CSP & CORS secure করে configure করতে হবে।


1. Spring Boot Backend Configuration

1.1 CSP (Content Security Policy)

Spring Boot WebFlux বা Spring MVC application-এ CSP header সেট করতে হবে:

a) WebFlux (reactive)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.server.WebFilter;

@Configuration
public class SecurityHeaderConfig {

    @Bean
    public WebFilter cspHeaderFilter() {
        return (exchange, chain) -> {
            exchange.getResponse().getHeaders().add(
                "Content-Security-Policy",
                "default-src 'self'; frame-src 'self'; connect-src 'self';"
            );
            return chain.filter(exchange);
        };
    }
}

b) Spring MVC

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.OncePerRequestFilter;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@Configuration
public class SecurityHeaderConfig {

    @Bean
    public OncePerRequestFilter cspHeaderFilter() {
        return new OncePerRequestFilter() {
            @Override
            protected void doFilterInternal(HttpServletRequest request,
                                            HttpServletResponse response,
                                            FilterChain filterChain)
                    throws ServletException, IOException {
                response.setHeader("Content-Security-Policy",
                        "default-src 'self'; frame-src 'self'; connect-src 'self';");
                filterChain.doFilter(request, response);
            }
        };
    }
}

Note: 'self' means same origin. Development/test-এ সব allow করতে চাইলে connect-src * 'unsafe-inline' 'unsafe-eval' data: blob:; ব্যবহার করা যায়।


1.2 CORS Configuration

Browser fetch/API calls চলার জন্য CORS allow করতে হবে।

a) Global CORS Filter (Recommended for dev)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class GlobalCorsConfig {

    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedOriginPattern("*"); // সব origin allow
        config.addAllowedHeader("*");        // সব header allow
        config.addAllowedMethod("*");        // GET, POST, PUT, DELETE, OPTIONS
        config.setAllowCredentials(true);    // credentials allow

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

b) Controller-Level (Optional)

@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/api")
public class MyController {

    @PostMapping("/refresh-token")
    public ResponseEntity<String> refreshToken() {
        return ResponseEntity.ok("Token refreshed successfully!");
    }
}

⚠️ Production environment-এ * ব্যবহার করা ঠিক নয়, সেক্ষেত্রে নির্দিষ্ট frontend domain allow করা উচিত।


2. Frontend Testing (Chrome & Firefox)

2.1 Fetch Example

fetch("http://localhost:8080/oauth2/access-token-generation/refresh-token", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ refreshToken: "abcd1234" })
})
.then(res => res.text())
.then(console.log)
.catch(console.error);

2.2 Chrome

  • CSP & CORS normally Chrome enforce করে।

  • Development-এ যদি কোন CSP block হয়, Chrome debug করতে পারো:

    chrome.exe --disable-web-security --user-data-dir="C:\temp\chrome-dev"
    

⚠️ Strictly development/testing only. Production-এ never use.


2.3 Firefox

  • Firefox CSP block করলে console warning দেয়।

  • Dev environment-এ:

    1. Open console → paste code warning আসে
    2. টাইপ করো: allow pasting
    3. তারপর paste করে run করো
  • CORS block হলে Firefox তেমনভাবে error দেখাবে। Backend CORS enable করা থাকলে fetch কাজ করবে।


3. Notes

  • Development: সব allow করা যায় (*, unsafe-inline, unsafe-eval)।
  • Production: সবসময় specific origins ও domains ব্যবহার করা উচিত।
  • CSP ও CORS দুটি ভিন্ন security layer — একসাথে configure করতে হবে।

4. References


আমি চাইলে এই README Angular/React frontend specific proxy setup যোগ করেও upgrade করতে পারি, যাতে localhost:4200 → localhost:8080 fetch seamless কাজ করে।

চাও কি সেটা যোগ করি?

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...