2013-11-25 2 views

답변

0

이 문제는 실제로 CarbonContext에서 버그 또는 제한 사항이 아닙니다 (적어도 WSO2 AS 5.1.0에서는 시도한 바 있습니다). 다음 코드 스 니펫을 사용하여이를 증명할 수 있습니다.

try { 
      CarbonContext carbonContext = CarbonContext.getCurrentContext(); 
      int tenantId = carbonContext.getTenantId(); 
      System.out.println("TENANT ID:" + tenantId); 
      String username = carbonContext.getUsername(); 
      System.out.println("USERNAME:" + username); 
      UserRealm userRealm = carbonContext.getUserRealm(); 
      String[] roleNames = userRealm.getUserStoreManager().getRoleNames(); 
      userRealm.getUserStoreManager().getRoleListOfUser(username); 
      System.out.println("ALL ROLES:" + Arrays.toString(roleNames)); 
    } catch (Exception e) { 
      e.printStackTrace(); 
    } 

세입자 ID는 올바르게 인쇄되었지만 사용자 이름은 아닙니다. 명백한 것은 아니지만, 그것은 당신이 당신이 누구인지 서비스에 대해 말하지 않았기 때문입니다. 관리 콘솔에 로그인되어 있다고해서 AS에 호스팅 된 서비스에 로그인 한 것은 아닙니다. 비슷한 기능을 사용하려면 서비스의 보안을 설정해야합니다 (관리 콘솔에서 수행 할 수 있음). 예를 들어 UsernameToken을 사용했습니다. 그런 다음 TryIt은 서비스를 호출 할 때 사용자 이름과 암호를 입력하라는 메시지를 표시해야합니다. 유효한 자격 증명에 대해서만 응답을받습니다.

그러나, 그래도 코드는 여전히 CarbonContext가 null 인 사용자 이름과 관련된 동일한 예외를 반환합니다. 이 문제를 해결하려면 다음 두 매개 변수를 각 서비스의 services.xml에 추가해야합니다 (예 : samples/HelloService의 - conf/services.xml).

<parameter name="adminService" locked="true">true</parameter> 
    <parameter name="AuthorizationAction" 
      locked="false">/permission/admin/login</parameter> 

이렇게하면 서비스를 호출하는 동안 로그인 한 사용자에 대한 필수 정보로 Carbon Context가 초기화됩니다.

이 작업을 수행하려면 물론 services.xml의 변경 사항으로 서비스를 다시 배포해야합니다. 재배포가 완료되면 관리 콘솔을 사용하여 완료된 보안 설정이 제거되므로 보안을 설정했는지 여부를 확인하십시오.

관련 문제