如何将Authorization标头添加到所有Glide 4.x请求

问题描述 投票:1回答:2

在Glide 3.x中,我们可以添加一个String模型加载器,如下所示:

public class GlideService /* implements GlideModule*/ {


    @Override
    public void registerComponents(Context context, Glide glide) {
        glide.register(String.class, InputStream.class, new HeaderedLoader.Factory());
    }

    private static class HeaderedLoader extends BaseGlideUrlLoader<String> {

        public HeaderedLoader(Context context) {
            super(context);
        }

        @Override
        protected String getUrl(String model, int width, int height) {
            return model;
        }


        @Override
        protected Headers getHeaders(String model, int width, int height) {

            LazyHeaders.Builder headersBuilder = new LazyHeaders.Builder();
            if (BuildConfig.FLAVOR.equals("staging")) {
                String auth = "username:password";
                String base64 = Base64.encodeToString(auth.getBytes(), Base64.NO_WRAP);
                headersBuilder.addHeader("Authorization", "Basic " + base64);
            }

            return headersBuilder.build();
        }

        public static class Factory implements ModelLoaderFactory<String, InputStream> {
            @Override
            public StreamModelLoader<String> build(Context context, GenericLoaderFactory factories) {
                return new HeaderedLoader(context);
            }

            @Override
            public void teardown() { }
        }
    }

}

但是从文档中我们不清楚如何在最新版本中实现这一目标。

android android-glide
2个回答
3
投票

我和你一样面临同样的问题。这是我如何修复它。

  1. 你的GlideService需要扩展AppGlideModule(如果你正在为应用程序编写代码)。有关这方面的更多详细信息,请参阅glide documentation
  2. 正如你现在使用滑翔4.x,你的类qazxsw poi现在已经覆盖了qazxsw poi的两个默认构造函数,这些是HeaderedLoaderBaseGlideUrlLoader<String>
  3. protected HeaderedLoader(ModelLoader<GlideUrl, InputStream> concreteLoader)类创建一个工厂。这应该是这样的 protected HeaderedLoader(ModelLoader<GlideUrl, InputStream> concreteLoader, @Nullable ModelCache<String, GlideUrl> modelCache)
  4. 然后,您将使用以下内容覆盖滑翔模块超类的HeaderedLoader方法 static class Factory implements ModelLoaderFactory<String, InputStream> { @Override public ModelLoader<String, InputStream> build(MultiModelLoaderFactory multiFactory) { ModelLoader<GlideUrl, InputStream> loader = multiFactory.build(GlideUrl.class, InputStream.class); return new HeaderedLoader(loader); } @Override public void teardown() { /* nothing to free */ } }

您应该能够保持逻辑以处理public void registerComponents(Context context, Glide glide, Registry registry)类中的http标头。我已经使用这种方法为glide 4.0添加自定义标头滑行请求。


1
投票

试试这个

@Override
public void registerComponents(Context context, Glide glide, Registry registry) {
     registry.append(String.class, InputStream.class, new HeaderedLoader.Factory());
 }
© www.soinside.com 2019 - 2024. All rights reserved.