首页 > 解决方案 > 在 Spring 中按用户区分的 RequestMapping

问题描述

我有两个处理相同资源的控制器。一个用于常规 Web 应用程序,另一个用于门户(理论上可能有多个门户和多个控制器)。

@Controller
@RequestMapping(value = "/*/web/cases")
public class CasesDetailController extends BaseController<CasesForm> { ... }

@Controller
@RequestMapping(value = "/*/portal/cases")
public class CasesPortalDetailController extends BaseController<CasesForm> { ... }

在某些控制器中,我们只是为门户解析不同的视图,但在某些情况下,控制器逻辑完全不同。例如,这个在门户中有许多在应用程序中不可用的映射。

问题在于为同一资源管理 2 个不同的 url。例如,如果我想为一个案例放置一个链接,我必须通过检查当前用户是否登录到 Web 或门户来在服务器中计算它,而不是放置一个恒定的基本 url 和一个 uuid 作为参数。

我的问题是我是否可以对请求映射做一些事情来决定我可以使用哪个控制器。我能想到的最好的方法是使用一个参数:

@RequestMapping(value = "/*/cases") // Web
@RequestMapping(value = "/*/cases", params = "device=portal") // Portal

但是当我在用户中提供该信息时,我想避免在 url 中发送该信息(我们使用自定义用户类,该类从 spring 扩展基本用户并包含设备)。有没有办法在请求映射中检查?像这样的东西:

@RequestMapping(value = "/*/cases", magicFunctionality=getLoggedUser().getDevice()="web")

可能不存在这样的东西(至少我在手册中没有发现任何东西),但任何关于如何面对这个问题的想法都会受到欢迎。

提前致谢。贡萨洛。

标签: springrequest

解决方案


推荐阅读