Spring Boot CORS Handling, Commons Lang3 Utility Guide, and Custom Startup Banner Configuration

Per-Controller CORS Setup Apply the @CrossOrigin annotation directly to a controller method or entire controller to enable cross-origin requests for specific endpoints:

@RestController
@RequestMapping("/system")
public class SystemInfoController {

    @CrossOrigin
    @GetMapping("/current-time")
    public ServiceResponse fetchSystemTime() {
        try {
            List<SystemTimeDto> timeRecords = systemDataService.retrieveSystemTimeEntries();
            return ServiceResponse.success()
                .setData(timeRecords)
                .setMessage("System time retrieved successfully");
        } catch (Exception e) {
            return ServiceResponse.failure()
                .setMessage("Failed to fetch system time: " + e.getMessage());
        }
    }
}

Global CORS Configuration Create a configuration class implementing WebMvcConfigurer to define cross-origin rules for all endpoints:

@Configuration
public class GlobalCorsConfiguration {

    @Bean
    public WebMvcConfigurer corsConfiguration() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry corsRegistry) {
                corsRegistry.addMapping("/**")
                    .allowedOriginPatterns("*")
                    .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                    .allowedHeaders("*")
                    .allowCredentials(true)
                    .exposedHeaders(HttpHeaders.SET_COOKIE)
                    .maxAge(3600);
            }
        };
    }
}

For implementing IP whitelitsing via interceptors, refer to external resources: link1, link2


Apache Commons Lang3 Utility Libray Add the latest Maven dependency to your project:

<!-- Apache Commons Lang3 for Java utility classes -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.14.0</version>
</dependency>

StringUtils: String Manipulation

// Truncate string and append ellipsis
StringUtils.abbreviate("helloWorld123", 8); // Returns "helloW..."

// Append suffix if missing (case-insensitive)
StringUtils.appendIfMissingIgnoreCase("HelloXYZ", "xyz"); // Returns "HelloXYZ"

// Convert first character case
StringUtils.capitalize("java"); // Returns "Java"
StringUtils.uncapitalize("Spring"); // Returns "spring"

// Center string within specified length
StringUtils.center("test", 8, "-"); // Returns "--test--"

// Remove line breaks
StringUtils.chomp("line1\r\nline2"); // Returns "line1"

// Check substring presence (case-insensitive)
StringUtils.containsIgnoreCase("Apache", "ache"); // Returns true

// Count substring occurrences
StringUtils.countMatches("abracadabra", "a"); // Returns 5

// Remove all whitespace
StringUtils.deleteWhitespace("  he llo  "); // Returns "hello"

// Find differing part between two strings
StringUtils.difference("applePie", "appleCake"); // Returns "Cake"

// Check suffix/prefix matches
StringUtils.endsWith("document.pdf", ".pdf"); // Returns true
StringUtils.startsWithIgnoreCase("SpringBoot", "spring"); // Returns true

// Compare strings (case-insensitive)
StringUtils.equalsIgnoreCase("Hello", "HELLO"); // Returns true

// Get common prefix from string array
StringUtils.getCommonPrefix(new String[]{"springCore", "springBoot"}); // Returns "spring"

// Find nth occurrence index
StringUtils.ordinalIndexOf("aabbaabbaa", "ab", 2); // Returns 4

// Reverse string
StringUtils.reverse("banana"); // Returns "ananab"

// Split string with delimiter
StringUtils.split("a,b,c,d", ","); // Returns ["a", "b", "c", "d"]

RandomStringUtils: Random String Generation

// Generate 6-digit random numeric string
RandomStringUtils.randomNumeric(6);

// Generate random string from specified character set
RandomStringUtils.random(8, "abcdefghijklmnopqrstuvwxyz");

// Generate random alphabetic string
RandomStringUtils.random(5, true, false);

NumberUtils: Number Operations

// Find maximum value in integer array
NumberUtils.max(new int[]{5, 2, 9, 1}); // Returns 9

// Check if string is valid integer
NumberUtils.isDigits("12345"); // Returns true

// Check if string is valid number
NumberUtils.isNumber("123.45"); // Returns true

ArrayUtils: Array Handling

// Create string array
String[] fruitArray = ArrayUtils.toArray("apple", "banana", "cherry");

// Check array equality
ArrayUtils.isEquals(fruitArray, new String[]{"apple", "banana", "cherry"}); // Returns true

// Check if array contains element
ArrayUtils.contains(fruitArray, "banana"); // Returns true

// Convert 2D array to Map
Map<String, String> colorMap = ArrayUtils.toMap(new String[][]{\n    {"RED", "#FF0000"},\n    {"GREEN", "#00FF00"},\n    {"BLUE", "#0000FF"}\n});

DateUtils: Date Manipulation

// Add 3 days to current date
DateUtils.addDays(new Date(), 3);

// Check if two dates are same day
DateUtils.isSameDay(new Date(), new Date()); // Returns true

// Parse string to Date
DateUtils.parseDate("2024-05-20", new String[]{"yyyy-MM-dd"});

ExtendedStringUtils: Custom String Utility Class

package com.example.util;

import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

public class ExtendedStringUtils extends StringUtils {

    private static final char SEPARATOR = '_';
    private static final String CHARSET = "UTF-8";

    public static byte[] toBytes(String input) {
        if (input == null) return null;
        try {
            return input.getBytes(CHARSET);
        } catch (UnsupportedEncodingException e) {
            return new byte[0];
        }
    }

    public static String fromBytes(byte[] bytes) {
        if (bytes == null) return EMPTY;
        try {
            return new String(bytes, CHARSET);
        } catch (UnsupportedEncodingException e) {
            return EMPTY;
        }
    }

    public static boolean isInList(String input, String... candidates) {
        if (input == null) return false;
        for (String candidate : candidates) {
            if (input.equals(trim(candidate))) return true;
        }
        return false;
    }

    public static String stripHtmlTags(String htmlContent) {
        if (isBlank(htmlContent)) return EMPTY;
        Pattern pattern = Pattern.compile("<.+?>");
        Matcher matcher = pattern.matcher(htmlContent);
        return matcher.replaceAll(EMPTY);
    }

    public static String convertToCamelCase(String input) {
        if (input == null) return null;
        input = input.toLowerCase();
        StringBuilder result = new StringBuilder(input.length());
        boolean capitalizeNext = false;
        for (char c : input.toCharArray()) {
            if (c == SEPARATOR) {
                capitalizeNext = true;
            } else if (capitalizeNext) {
                result.append(Character.toUpperCase(c));
                capitalizeNext = false;
            } else {
                result.append(c);
            }
        }
        return result.toString();
    }

    public static String convertToUnderscoreCase(String input) {
        if (input == null) return null;
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (i > 0 && Character.isUpperCase(c)) {
                result.append(SEPARATOR);
            }
            result.append(Character.toLowerCase(c));
        }
        return result.toString();
    }

    public static String getClientIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("X-Real-IP");
        if (isNotBlank(ip)) ip = request.getHeader("X-Forwarded-For");
        if (isNotBlank(ip)) ip = request.getHeader("Proxy-Client-IP");
        if (isNotBlank(ip)) ip = request.getHeader("WL-Proxy-Client-IP");
        return (ip != null) ? ip : request.getRemoteAddr();
    }
}

Spring Boot Custom Startup Banner Spring Boot displays a default ASCII banner on startup. You can customize or disable this behavior using the following methods:

Customize Banner Create a banner.txt file in the src/main/resources directory. Use tools like patorjk.com/software/taag to generaet ASCII art, then paste it into the file. Spring Boot will automatically use this custom banner on startup.

Disable Banner

  1. Via Main Method:
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Application.class);
        app.setBannerMode(Banner.Mode.OFF);
        app.run(args);
    }
}
  1. Via Configuration File: Add this line to application.properties:
spring.main.banner-mode=off
  1. Via Empty File: Creating an empty banner.txt in src/main/resources will also suppress the default banner.

Banner Display Modes The Banner.Mode enum controls where the banner is displayed:

  • OFF: Disable all banner output
  • CONSOLE: Print banner to system console (default)
  • LOG: Print banner to application log file
enum Mode {
    /** Disable banner display entirely */
    OFF,
    /** Print banner to system console */
    CONSOLE,
    /** Print banner to application log */
    LOG
}

Tags: Spring Boot cors Commons Lang3 java utilities Custom Startup Banner

Posted on Mon, 29 Jun 2026 16:55:43 +0000 by Chrysanthus