2011-02-05 5 views
2

私はSpring AOPフレームワークをテストしており、次の質問があります。Spring MVC + Advice check securityの前に

私は次のコードを持っている:

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

+0

私はちょうど調査しています:) –

答えて

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

+0

ありがとう、どのように返された値を変更できますか? –

+0

@ danny.lesnik:答えの更新をご覧ください。 – Elbonian

+0

はい、ありがとう、私自身もそれを見つけました:)ありがとう。 –

関連する問題