Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring-截获请求并在域不同时进行不同的处理_Spring_Spring Boot - Fatal编程技术网

Spring-截获请求并在域不同时进行不同的处理

Spring-截获请求并在域不同时进行不同的处理,spring,spring-boot,Spring,Spring Boot,我有多域应用程序。 这意味着: 1.带有主域的主应用程序用于向世界展示它,并供客户管理其数据。。 2.客户通过指向主应用程序的自己的域向世界展示他们的数据 我需要能够拦截请求,并以我自己的方式处理它,如果它是为每一个主域以外的其他域来。 我该怎么做?有没有完整的请求拦截解决方案和此类控制器的好例子?您可以使用过滤器来实现这一点 下面是一个简单的例子: @SpringBootApplication public class So44844042Application { public s

我有多域应用程序。 这意味着: 1.带有主域的主应用程序用于向世界展示它,并供客户管理其数据。。 2.客户通过指向主应用程序的自己的域向世界展示他们的数据

我需要能够拦截请求,并以我自己的方式处理它,如果它是为每一个主域以外的其他域来。
我该怎么做?有没有完整的请求拦截解决方案和此类控制器的好例子?

您可以使用
过滤器来实现这一点

下面是一个简单的例子:

@SpringBootApplication
public class So44844042Application {

    public static void main(String[] args) {
        SpringApplication.run(So44844042Application.class, args);
    }

    @Component
    public static class DomainFilter extends GenericFilterBean {
        private final Map<String, String> redirect = new HashMap<>();

        public DomainFilter() {
            redirect.put("localhost", "http://www.google.com");
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            final String domain = request.getServerName();
            if (redirect.containsKey(domain)) {
                ((HttpServletResponse) response).sendRedirect(redirect.get(domain));
            } else {
                chain.doFilter(request, response);
            }
        }
    }

    @RestController
    public static class HomeController {
        @GetMapping
        public String home() {
            return "Welcome";
        }
    }
}
@springboot应用程序
公共类SO44844042应用程序{
公共静态void main(字符串[]args){
run(So44844042Application.class,args);
}
@组成部分
公共静态类DomainFilter扩展了GenericFilterBean{
私有最终映射重定向=新建HashMap();
公共域筛选器(){
redirect.put(“localhost”http://www.google.com");
}
@凌驾
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)抛出IOException、ServletException{
最后一个字符串domain=request.getServerName();
if(重定向.containsKey(域)){
((HttpServletResponse)response.sendRedirect(redirect.get(domain));
}否则{
链式过滤器(请求、响应);
}
}
}
@RestController
公共静态类HomeController{
@GetMapping
公共字符串home(){
返回“欢迎”;
}
}
}

运行它并尝试打开
http://localhost:8080
它会将您重定向到
www.google.com
但是
http://127.0.0.1:8080
仍然可以访问。

您可以使用spring侦听器侦听所有请求。它截取请求,执行逻辑,并可以重定向到最合适的控制器它是如何注入到过滤器链的?@组件使它对spring可见,spring依次执行过滤器注册的所有工作