我目前正在开发一个基于 Spring 的 Web 应用程序,并且有一个 Spring MVC 似乎没有(至少不是开箱即用)提供的特殊要求。该应用程序为多个用户提供数据,每个用户都组织在自己的“公司”中。用户登录后,我可以识别他所属的公司。
应用程序本身是由多个“模块”构建的,每个模块都有自己的域对象、DAO、服务和控制器类。这个概念背后的想法是,例如,我可以根据用户扩展某个控制器类(假设使用不同的服务类),这就是我的问题。
由于我不想更改某些用户的请求路径,因此我目前正在寻找一种方法,如何根据发出请求的用户为在某个请求路径上发出的请求提供不同的控制器实例。我想出了为公司附加一个 HTTP 标头字段的想法示例:
X-Company:12345
并让我的控制器配置如下:
@Controller
@RequestMapping(value="/foo/")
public class FooController {
// ...
}
@Controller
@RequestMapping(value="/foo" headers="X-Company=12345")
public class SpecialFooController extends FooController {
// ...
}
然而这是不可能的,因为 Spring MVC 将每个标头(Content-Type 和 Accept 除外)视为一种限制,因此在我的情况下,除非我添加“标头”限制,否则它将使用 FooController 而不是 SpecialFooController 处理所有请求在 FooController 上也是如此,这是不切实际的。有什么方法可以自定义这种行为或可以指向我寻找的方向吗?或者也许有人有另一个想法如何实现这一点。将不胜感激。谢谢!