2011-02-05 44 views
2

我正在測試Spring AOP框架並且有以下問題。Spring MVC +之前建議檢查安全性

我有以下代碼:

package danny.test.controllers; 

@Controller 
public class MyController{ 

@Autowired 
private DaoService service; 

@RequestMapping(value="/save",method = RequestMethod.POST) 
     public String addUser(@Valid MyClass myClass, BindingResult result){ 

service.save(myClass); 

return "Ok"; 
} 

我想諮詢方面之前創建的用戶會話來檢查用戶的安全性。

@Aspect 
public class Profiler { 

    @Pointcut("execution(* danny.test.services.DaoServices.*.*(..))") 
    public void methods(){} 

    @Before("methods()") 
    public void checkSecurity() throws Throwable{ 
     //check session if user is authenticated.... 
    } 

} 

我不知道是什麼做的是取消DaoServices.save方法的執行,如果用戶沒有通過驗證,並導致控制器返回其他任何值,而不是「OK」。

我可以做嗎? 有人能指點我這樣的例子嗎? 我可以使用@Around建議進行此類操作嗎?

+0

我只是好奇,爲什麼你不使用Spring Security來做到這一點? – limc 2011-02-05 14:10:19

+0

我只是在調查:) – 2011-02-05 16:39:30

回答

5

是的,我認爲你應該使用@Around建議,如果身份驗證失敗,只是不要調用ProceedingJoinPoint.proceed()方法。

UPDATE:

要返回別的東西你的方法應該是這個樣子:

@Before("methods()") 
public Object checkSecurity(ProceedingJoinPoint pjp) throws Throwable{ 
    if (/*user is authenticated*/) { 
     return pjp.proceed(); 
    } else { 
     return "NOT OK"; 
    } 
} 

請注意,該方法返回一個對象。另見春季documentation的這一部分。