2011-10-12 3 views
2

기본 webappcontext 구성 파일에 기능을 정의했습니다. 이 파일에는 컨트롤러 클래스를 제외한 모든 패키지를 검색하는 요소도 들어 있습니다. 별도의 디스패처 - 서블릿 컨텍스트 파일이 컨트롤러 패키지를 검색합니다. 요청을 처리하는 컨트롤러 메서드에 메서드 수준 보안을 적용하면 작동하지 않습니다. 그것은 dispatcher-servlet에서 명시 적으로 해당 요소를 언급 한 경우에만 작동합니다.봄 보안 전역 방법 보안 위치

이 포럼의 저의 이전 질문에서 디스패처 - 서블릿 컨텍스트는 주요 웹 응용 프로그램 컨텍스트의 하위 항목이라는 것을 알고 있습니다. 이 경우 dispatcher-servlet은 상위 요소의 요소를 가져와야합니다.

답변

2

Spring Security FAQ (강조 광산)을 참조하십시오. 서비스 레이어에 포인트 컷을 적용하면 앱 보안 컨텍스트에서 <global-method-security> 만 설정하면됩니다. 봄 웹 응용 프로그램에서

, 디스패처 서블릿의 스프링 MVC 빈을 보유하고있는 애플리케이션 컨텍스트는 종종 기본 응용 프로그램 컨텍스트에서 분리합니다. 이것은 종종 myapp-servlet.xml 파일에 정의됩니다. 여기서 "myapp"는 web.xml의 DispatcherServlet에 할당 된 이름입니다. 응용 프로그램에는 각각 DispatcherServlet이있을 수 있으며 각각 고유 한 격리 된 응용 프로그램 컨텍스트가 있습니다. 이러한 "하위"컨텍스트의 beans는 나머지 응용 프로그램에서 볼 수 없습니다. "부모"응용 프로그램 컨텍스트는 web.xml에 정의한 ContextLoaderListener에 의해로드되고 모든 자식 컨텍스트 에 표시됩니다. 이 상위 컨텍스트는 일반적으로 요소를 포함하여 보안 구성을 정의하는 곳입니다. 결과적으로 콩이 DispatcherServlet 컨텍스트에서 볼 수 없으므로 의 메소드에 적용된 보안 제한이 적용되지 않습니다. 선언을 웹 컨텍스트로 이동하거나 보안을 유지하려는 bean을 기본 응용 프로그램 컨텍스트로 이동해야합니다.

일반적으로 개별 웹 컨트롤러가 아닌 계층의 서비스에서 메소드 보안을 적용하는 것이 좋습니다.