繁体   English   中英

有没有办法在Play中动态更改Oracle连接! 框架?

[英]Is there a way to change an Oracle connection on the fly in Play! Framework?

我目前在一个项目中工作,每个用户在Oracle 11g DB中都有自己的架构。 完成此设计是因为访问Oracle表的所有安全角色和权限都存储在数据库中。 我们的团队正在努力想象如何在酷玩中做到这一点! 框架。 有什么建议么?

据我所知,您可以尝试使用类似的东西包装DB.datasource的值(其中currentUser()currentPassword()应该返回发出请求的当前用户的凭据):

public class DataSourceWrapper {
    private DataSource original;
    public DataSourceWrapper(DataSource original) {
        this.original = original;
    }

    public Connection getConnection() {
        return original.getConnection(currentUser(), currentPassword());
    }

    ...

    public DataSource getOriginal() {
        return original;
    }
}

DB.datasource替换应该在执行DB和JPA插件的onApplicationStart()方法之间进行,因此您需要创建自定义插件:

public class DataSourceReplacementPlugin extends PlayPlugin {
    public void onApplicationStart() {
        DB.datasource = new DataSourceWrapper(DB.datasource);
    }

    public void onApplicationStop() {
        if (DB.datasource instanceof DataSourceWrapper) {
            DB.datasource = ((DataSourceWrapper) DB.datasource).getOriginal();
        }
    }
}

并在conf/play.plugins中以适当的优先级conf/play.plugins

350: DataSourceReplacementPlugin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM