2011-02-05 3 views
2

나는 Spring AOP 프레임 워크를 테스트 중이고 다음과 같은 질문이있다.스프링 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 방법의 실행을 취소하고 컨트롤러 대신 "확인"의 다른 값을 반환하게하는 것입니다 무엇을 해야할지 모르겠어요 무엇.

할 수 있습니까? 누군가가 그런 예를 가르쳐 줄 수 있습니까? 그런 작업에 @Around 조언을 사용할 수 있습니까?

+0

저는 궁금 해서요, 왜 이것을하기 위해 스프링 보안을 사용하지 않습니까? – 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

네, 감사합니다. 나 자신도 그것을 발견했습니다 :) 감사합니다. –