2013-12-15 2 views
4

사용자 역할을 기반으로 컨트롤러에 대한 액세스를 제한하려고합니다. 지금은 다음과 같은 방법스프링 MVC, 메서드 수준 보안

<http use-expressions="true"> 
    <intercept-url pattern="/**" access="hasRole([ROLE_ADMIN,ROLE_USER])" /> 
</http> 

에 security.xml 파일을 사용하지만 이런 식으로하고 싶지 해달라고 할 수 있습니다. 제어기 태그 오히려 제가

<http use-expressions="true"> 
    <intercept-url pattern="/**" access="isAuthenticated()"/> 
</http> 

물품되고 컨트롤러

@RequestMapping("/test") 
@PreAuthorize("hasRole('ROLE_USER')") 
public String test() { 
    return "test"; 
} 

@RequestMapping("/testadmin") 
@PreAuthorize("hasRole('ROLE_ADMIN')") 
public String testAdminPage() { 
    return "testadmin"; 
} 

해주기 ROLE_USER 모두 (ROLE_ADMIN & ROLE_ 사용자)에 액세스 할 수있다. 이게 문제 야. 을 기반으로하고 testadmin.jsp은 ROLE_ADMIN 유형 사용자 만 볼 수 있으며 test.jsp은 "ROLE_USER"유형 사용자 만 볼 수 있습니다.

xml 파일에 액세스 코드를 쓰는 대신 요약하면 컨트롤러에서 제어하려고합니다.

어떻게해야합니까 ??

+0

정확히 작동하지 않는 이유는 무엇입니까? –

+0

ROLE_USER는 (ROLE_ADMIN & ROLE_ USER) 태그 컨트롤러에 액세스 할 수 있습니다. 이것은 문제입니다 – LynAs

답변

4

당신은

<global-method-security pre-post-annotations="enabled"/> 

이 다음 봄 컨트롤러 프록시받을 예정하고 PreAuthorize 주석이 평가 될 것입니다 통해 메소드 레벨 보안을 활성화해야합니다.

자세한 정보는 여기에서 찾을 수 있습니다 (섹션 16.3) :

http://docs.spring.io/spring-security/site/docs/current/reference/el-access.html

편집 :

나는 당신의 Controller 콩이 Disptacher 서블릿에서 (웹 컨텍스트를) 생성되는 추측하고 보안 구성은 루트 컨텍스트에 있음 -> 컨트롤러는 BeanPostProcessor의 영향을받지 않으므로 <global-method-security> 태그를 웹 컨텍스트 config (dispatcher-servlet.xml?)에 넣어야합니다.

+0

나는 이것을 시도했지만 이미 작동하지 않습니다. 만약 내가이 일을 어떤 유형의 인증 된 사용자가 모든 컨트롤러를 볼 수 있습니다. ROLE_USER는 ROLE_ADMIN 태그 컨트롤러에 액세스 할 수 있습니다. – LynAs

+0

내 보안 xml 파일 참조 http://pastebin.com/vBiALDqz – LynAs

+0

내 대답을 업데이트했습니다 –

관련 문제