java – Spring Security MVC:同样的@RequestMapping,不同@Secured

前端之家收集整理的这篇文章主要介绍了java – Spring Security MVC:同样的@RequestMapping,不同@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注释,但机制是一样的)也可以发现herehere

猜你在找的Java相关文章