我目前在一个项目中工作,其中每个用户在Oracle 11g DB中都有自己的模式。之所以进行这种设计,是因为访问Oracle表的所有安全角色和权限都存储在数据库中。我们的团队正在试图弄清楚如何在酷玩中做到这一点!框架。有什么建议吗?
发布于 2011-09-21 01:43:17
据我所知,您可以尝试用下面这样的方式包装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中以适当的优先级注册
350: DataSourceReplacementPluginhttps://stackoverflow.com/questions/7489195
复制相似问题