2013-02-07 27 views
1

比方说,我有两种方法做相关但不同的东西@Controller。我想在相同的URL端点上公开它们,但根据安全上下文具有不同的功能。现在我知道,我能有一个映射请求方法和调度,以我的类中不同的效用函数,但我可以线它使Spring MVC的将根据什么来在处理调度给我吗?Spring安全注解是否会影响Spring MVC调用的派发?

作为一个稻草人例如,有代码ROLE_ADMIN和ROLE_USER之间的调度,但我的实际使用情况是块好更加复杂:

@Controller 
public class Controller { 

    @RequestMapping("/api/thing") 
    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    public String doAnAdministrativeThing() { 
     ... (admin-priviledge stuff goes here) 
    } 

    @RequestMapping("/api/thing") 
    @PreAuthorize("hasRole('ROLE_USER')") 
    public String doADifferentThing() { 
     ... (normal-priviledged stuff goes here) 
    } 

} 

抢占任何兔子洞:

  1. 不,我可能没有任何选择余地具有两种功能不同的URL或有不同的参数或任何“正常” @RequestMapping位

  2. 安全上下文差异是复杂的,但可以在@PreAuthorize表达内处理

  3. 其实有两个以上不同的情况下派遣上

回答

2

我认为这是行不通的,全球性的方法安全与MVC层完全没有关系。 而且它的正式推荐使用这种方法的安全性only for the service layer

一般我们会在服务 层而不是单个网络控制器推荐应用方法的安全性。

附:一般来说,我尽量避免使用AOP与Spring控制器,以及(在servlet上下文,而不是)宣布AOP方法只有在根上下文,因为进行代理控制器实例会导致一些混乱行为,并强制用户知道Spring AOP的具体的事情像JDK代理和CGLIB代理之间的差异,说明如何处理等

+0

这是我从文档中获得的印象,但它似乎是我想要检查的一种有用模式。谢谢。 – jricher