gpt4 book ai didi

java - Spring Security + MVC : same @RequestMapping, 不同@Secured

转载 作者:IT老高 更新时间:2023-10-28 13:47:12 25 4
gpt4 key购买 nike

假设我们有一个使用 Spring MVC 和 Spring Security 配置的 API 端点。我们希望能够处理一对 @RequestMapping 和 @Secured 注释,其中唯一的 @Secured 注释值因对而不同。这样,我们就可以根据相同请求的安全规则返回不同的响应正文。

通过避免将安全规则直接检查到方法主体中,这可能使我们的代码更易于维护。

有一个不工作的例子,这是我们想做的:

@Controller
@RequestMapping("/api")
public class Controller {

@Secured ({"ROLE_A"})
@RequestMapping(value="{uid}", method=RequestMethod.GET)
@ResponseBody
public Response getSomething(@PathVariable("uid") String uid) {
// Returns something for users having ROLE_A
}

@Secured ({"ROLE_B"})
@RequestMapping(value="{uid}", method=RequestMethod.GET)
@ResponseBody
public Response getSomethingDifferent(@PathVariable("uid") String uid) {
// Returns something different for users having ROLE_B
}
}

我们怎样才能做到这一点?如果可以做到这一点:应该如何为同时拥有 ROLE_A 和 ROLE_B 的用户管理优先级?

最佳答案

假设您使用 Spring 3.1(或更高版本)以及 RequestMappingHandlerMapping(和 RequestMappingHandlerAdapter),您可以扩展请求映射机制。您可以通过创建自己的 RequestCondition 实现来做到这一点。接口(interface)和扩展RequestMappingHandlerMapping根据您方法上的 @Secured 注释构造它。

您需要覆盖 RequestMappingHandlerMapping 上的“getCustomMethodCondition”方法,并根据 Method 和 @Secured 注释的存在构造您的 RequestCondition 自定义实现。在将传入请求与方法匹配时,所有这些信息都会被考虑在内。

相关答案(虽然不是针对@Secured注解但机制相同)也可以找到herehere

关于java - Spring Security + MVC : same @RequestMapping, 不同@Secured,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17995744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com