2009-10-23 7 views
3

실행 방법을 보안하기 위해 struts2 액션에 @Secured({"ROLE_ADMIN"})이 있습니다. execute 메소드에서 액션의 멤버 변수에 메시지를 할당 한 다음 SUCCESS를 반환하고 JSP 페이지에서 끝납니다. 페이지에서 액션 구성원 변수를 <sproperty>으로 검색합니다.스프링 보안 및 스트럿츠 2

private String greeting; 

public String execute() throws Exception { 
    this.greeting="Hello"; 
    return SUCCESS; 
} 

// getters and setters for greeting 
... 

<s:property value="greeting" /> 

문제는 보안 주석이 존재하는 경우 JSP는 멤버 변수에 대해 아무것도 표시되지 않습니다하지만 @Secured이 제거 될 때 모든 것이 제대로 작동하고 멤버 변수로 설정 한 메시지를 표시합니다.

실제 보안이 정상적으로 작동하는 것으로 보입니다.하지만 주석을 통해 활성화되면 멤버 변수 (또는 액션 인스턴스)가 값 스택으로 이동하지 않습니다.

오류 메시지가 표시되지 않습니다.

+0

나는 S2 앱과 함께 스프링 시큐리티를 사용하지 않았지만, 속성 태그는'getGreeting()'을 호출 할 것인데, 주석을 달 수도있다. 그렇다면 'ModelDriven'을 고려할 수도 있습니다. –

답변

1

<s:property value="greeting" />이 실행되기 전에 SecurityContextHolder.getContext()에 부여 된 권한으로 "ROLE_ADMIN"이 있어야합니다.

또한 보안 컨텍스트를 저장하는 기본 "스레드 로컬"전략을 사용하는 경우 부여 된 권한이 각 요청 스레드에 올바르게 저장되어 있는지 확인하십시오. 예를 들어 http 세션에 사용자 자격 증명에 대한 정보를 저장하는 경우 HttpSessionContextIntegrationFilter이 필요합니다.

마지막 수단으로 가능한 경우, 사용중인 스프링 보안 인터셉터에서 단계별 디버그 세션을 수행하고 문제점을 체크 아웃 할 수 있습니다.