首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Milton.io身份验证

Milton.io身份验证
EN

Stack Overflow用户
提问于 2012-10-19 16:55:32
回答 1查看 1.5K关注 0票数 2

我已经写了一个小的grails网络应用。我正在使用milton.io通过webdav访问一些内容。所以webdav还在运行,我可以上传、获取、删除文件,等等。但现在我想添加身份验证和授权。现在问题来了:

资源接口为我提供了两种方法:

代码语言:javascript
复制
Object authenticate(String user, String password);
boolean authorise(Request request, Request.Method method, Auth auth);

因此,我的资源类实现了资源接口,但框架从未调用过authenticate方法。我必须自己实现Auth Basic吗?

我对弥尔顿的了解很少。可能是我忘记了什么,因为我的webdav客户端(例如身体)从不要求用户名/密码。

谢谢你的帮助,彼得·韦弗

我的资源类签名:

代码语言:javascript
复制
class SResource implements GetableResource, PropFindableResource, Resource, DeletableResource, MoveableResource,  ReportableResource, CopyableResource 

class SFileResource extends SResource implements ReplaceableResource

class SFolderResource extends SResource implements PutableResource, MakeCollectionableResource, CollectionResource

下面是获取HttpManager的构建器

代码语言:javascript
复制
class SMiltonConfig implements MiltonConfigurator {


protected HttpManagerBuilder builder;
protected List<Initable> initables;
protected HttpManager httpManager;

public SMiltonConfig(){
    try {
        // Attempt to use Enterprise edition build if available
        Class builderClass = Class.forName("io.milton.ent.config.HttpManagerBuilderEnt");
        builder = (HttpManagerBuilder) builderClass.newInstance();
        println ("load Ent. HTTP Manager")
    } catch (InstantiationException ex) {
        builder = new HttpManagerBuilder();
        println ("load Std. HTTP Manager")
    } catch (IllegalAccessException ex) {
        println ("load Std. HTTP Manager")
        builder = new HttpManagerBuilder();
    } catch (ClassNotFoundException ex) {
        println ("load Std. HTTP Manager")
        builder = new HttpManagerBuilder();
    }
}

@Override
public HttpManager configure(Config arg0) throws ServletException {
    ResourceFactory rf = new SResourceFactory();
    builder.setMainResourceFactory(rf);
    checkAddInitable(initables, builder.getMainResourceFactory());
    httpManager = builder.buildHttpManager();
    for( Initable i : initables ) {
        i.init(config, httpManager);
    }
    return httpManager;
}

@Override
public void shutdown() {
    httpManager.shutdown()
    for( Initable i : initables ) {
        i.destroy(httpManager);
    }        
}

private void checkAddInitable(List<Initable> initables, Object o) {
    if( o instanceof Initable) {
        initables.add((Initable)o);
    } else if( o instanceof List ) {
        for( Object o2 : (List)o) {
            checkAddInitable(initables, o2);
        }
    }
}
}

这里是ResourceFactory

代码语言:javascript
复制
class SResourceFactory implements ResourceFactory {

def fileSystemService

public SResourceFactory(){
    println "loading resource Factory"
    def ctx = ServletContextHolder.servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT)
    fileSystemService = ctx.fileSystemService
}

@Override
public Resource getResource(String host, String strPath)
throws NotAuthorizedException, BadRequestException {
    SResource sfr
    sfr = fileSystemService.getFolderByPath(strPath)
    return sfr
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-19 18:49:56

如果您需要基本身份验证-您必须启用它。因此,将以下行添加到SMiltonConfig类的配置方法中。

代码语言:javascript
复制
builder.setEnableOptionsAuth(true); // enables auth
builder.setEnableBasicAuth(true);   // optional 

以下是资源授权方法的一个示例

代码语言:javascript
复制
    @Override
    public boolean authorise(Request r, Method m, Auth a) {
       return a != null;
    }

希望能有所帮助

弗洛里安·范恩

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12970696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档