Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot - determining a sub-domain (with wildcard)?

New to Spring Boot here. Spring MVC provides the @SubdomainMapping annotation, which does not seem to be available from what I can see in Spring Boot. I've seen a few people discuss using a filter to handle this. Or other approaches that seem overly convoluted.

Would there not be a (simple/cleaner) way to handle all sub-domains within a standard controller such as:

@SubdomainMapping(value = {"**"}
public String data(ModelMap modelMap, HttpServletRequest request) {

//Code to handles subdomain logic here ....

}

This would be a simple approach where all values are treated equally with minor differences.

Any suggestions would be helpful!

like image 264
SiriusBits Avatar asked Feb 10 '26 11:02

SiriusBits


1 Answers

I have worked on this myself and I have an answer that isn't as simple as you wanted, but I don't think there is one that simple.

So, you can create a handler interceptor adapter that will grab every request before it gets to your controller and grabs and processes the subdomain. This would require something like this:

@Component
public class SubDomainInterceptor extends HandlerInterceptorAdapter {


    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception arg3)
            throws Exception {

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model)
            throws Exception {

    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
        String mysub = request.getRequestURL().toString();
        //...
        // Do whatever you need to do with the subdomain
        //
        if (isGoodSubdomain){
             session.sendAttribute("subdomain", mysub);
        } else {
             response.sendRedirect("http://www.basesite.com"):
        }
        return true;
    }

You then use that session variable in your controllers to filter values or whatever you need to use them for. I know this isn't the simple answer you wanted, but it was the best one that I have found so far.

like image 82
AJ Henley Avatar answered Feb 13 '26 04:02

AJ Henley



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!