如何解决“WSO2碳环境及其在WSO2产品中的使用”中报告的问题?

时间:2013-11-25 16:47:53

标签: wso2

我已阅读http://wso2.com/library/articles/2012/03/carbon-context-its-usages-wso2-products/,您会发现底部有一条评论说明用例失败。请解释如何解决这个问题。

1 个答案:

答案 0 :(得分: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的更改来重新部署服务。并且,一旦重新部署,请检查是否启用了安全性,因为重新部署会删除使用管理控制台完成的安全设置。