java – Spring Security MVC:同样的@RequestMapping,不同@Secu
发布时间:2020-12-15 00:21:42 所属栏目:Java 来源:网络整理
导读:假设我们有一个使用 Spring MVC和 Spring Security配置的API端点.我们希望能够处理@RequestMapping和@Secured注释对,其中唯一的@Secured注释值不同于配对.这样,我们可以根据相同请求的安全规则返回不同的响应体. 这可能会使我们的代码更加易于维护,方法是避
假设我们有一个使用
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 } } 我们该如何实现呢? 解决方法
假设您正在使用Spring 3.1(或更高版本)以及RequestMappingHandlerMapping(和RequestMappingHandlerAdapter),您可以扩展请求映射机制.您可以通过创建自己的
RequestCondition接口的实现来实现,并根据您的方法的@Secured注释扩展
RequestMappingHandlerMapping来构建此结构.
您将需要覆盖RequestMappingHandlerMapping上的“getCustomMethodCondition”方法,并且基于方法和@Secured注释的存在构造您的RequestCondition的自定义实现.当将传入请求与方法进行匹配时,所有信息将被考虑. 相关答案(虽然不是特定于@Secured注释,但机制是一样的)也可以发现here或here (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |