加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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
    }
}

我们该如何实现呢?
如果可以这样做:如何为具有ROLE_A和ROLE_B的用户管理优先级?

解决方法

假设您正在使用Spring 3.1(或更高版本)以及RequestMappingHandlerMapping(和RequestMappingHandlerAdapter),您可以扩展请求映射机制.您可以通过创建自己的 RequestCondition接口的实现来实现,并根据您的方法的@Secured注释扩展 RequestMappingHandlerMapping来构建此结构.

您将需要覆盖RequestMappingHandlerMapping上的“getCustomMethodCondition”方法,并且基于方法和@Secured注释的存在构造您的RequestCondition的自定义实现.当将传入请求与方法进行匹配时,所有信息将被考虑.

相关答案(虽然不是特定于@Secured注释,但机制是一样的)也可以发现here或here

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读