我正在使用Apache CXF,并且想使用SecureAnnotationsInterceptor通过@RolesAllowed批注保护我的端点。

据我了解,我必须通过将引用传递给setSecuredObject方法来告诉拦截器要保护哪个对象。

不幸的是,该代码并非旨在处理bean列表。

然后,我想知道如何使用此拦截器保护多个端点。

我是否必须创建自己的此拦截器版本或创建它的多个实例(每个端点一个以确保安全)或其他方式?

最佳答案

我不知道你是否找到答案。对我来说,我修改了此拦截器的setSecuredObject方法,如下所示:

public void setSecuredObjectsList(Object[] objects) {

    Map<String, String> rolesMap = new HashMap<String, String>();
    for (Object o:objects ) {
        setSecuredObject(o, rolesMap);
    }

    super.setMethodRolesMap(rolesMap);
}


public void setSecuredObject(Object object, Map<String, String> rolesMap) {
    Class<?> cls = ClassHelper.getRealClass(object);
    findRoles(cls, rolesMap);
    if (rolesMap.isEmpty()) {
        LOG.warning("The roles map is empty, the service object is not protected");
    } else if (LOG.isLoggable(Level.FINE)) {
        for (Map.Entry<String, String> entry : rolesMap.entrySet()) {
            LOG.fine("Method: " + entry.getKey() + ", roles: " + entry.getValue());
        }
    }
}

09-28 02:02