Spring:没有控制器的全局路径变量或请求参数

时间:2015-05-27 10:32:23

标签: spring spring-mvc spring-security spring-boot spring-4

我有一个Spring Boot& Spring Security应用程序正在运行,现在应该获得多租户支持。

我想让事情变得尽可能简单。虽然我想通过路径变量或请求参数来确定数据库。 (Spring Boot应用程序前面的Apache Web Server将处理它,即它从子域映射到路径变量或请求参数)。

现在我需要一种方法来在Spring调用控制器之前获取第一个路径变量(或特定的请求参数),当然值必须存储在某个地方,所以当我需要选择正确的数据库时我可以访问它

所以(取决于可能的/更容易的)

  1. http://localhost:8080/customer1(我更喜欢)或
  2. http://localhost:8080?_customer=customer1
  3. 应该只使用@Controller调用@RequestMapping(""),并且值customer1应存储在该请求的某个位置。

    我知道2.可能会更简单,因为它已经点击了@Controller,但我更喜欢1.

    谢谢!

    编辑:

    我刚认识到,HandlerInterceptor无法按预期工作,因为Spring Security始终首先处理请求。虽然我需要一个在Spring Security开始之前处理它的拦截器。

1 个答案:

答案 0 :(得分:3)

您可以使用org.springframework.web.servlet.HandlerInterceptor。实现逻辑以通过Extract point descriptors from small images using OpenCV方法将值存储在请求中。

在spring配置文件中配置它,如下所示

<mvc:interceptors>
  <bean class="com.blah.interceptor.SomeInterceptor"/>
</mvc:interceptors> 

如果要根据路径拦截请求,请使用以下配置

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/customer1" />
        <bean class="com.blah.interceptor.SomeInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>