相关疑难解决方法(0)

安全地包装连接池

我正在尝试实现行级安全性,以便我们的应用程序可以实施更严格的访问控制.

我们正在研究的技术之一是Oracle的虚拟专用数据库,它通过基本上使用where子句谓词来扩充针对特定表的所有查询,从而允许行级安全性.由于我们处于Web环境中,因此我们需要在单个请求的线程内部在Oracle中设置特殊上下文.我们将连接池与服务帐户一起使用.

我开始研究Eclipse Link和Hibernate.Eclipse Link似乎有适合这个模型的事件.

这将涉及我们从hibernate迁移,这不是问题,但我们将为这些事件绑定到EL.

Oracle似乎暗示它们在Web Logic产品中的数据源级别实现.

上下文由WebLogic数据源代码设置和清除.

问题:使用一系列事件在DataSource级别执行此操作更合适.我应该最关注的事件或方法是什么?

补充问题:如何扩展连接池以使用一些自定义数据安全地初始化oracle上下文?我在Apache中挖掘,似乎扩展BasicDataSource并不能让我访问任何允许我在Spring完成时清理连接的东西.

我需要建立连接,并在退出/进入连接池时清理连接.我希望实现这么简单,没有人可以通过打破产品的微妙平衡来搞砸它.

- Specifically we are currently using Apache Commons DBCP Basic Data Source
Run Code Online (Sandbox Code Playgroud)

这将允许我们使用各种方式连接到数据库,并仍然执行我们的安全性.但我没有看到一个很好的例子或一组事件可以使用,并且滚动我自己的安全生命周期绝不是一个好主意.

java oracle datasource apache-commons-dbcp

21
推荐指数
1
解决办法
864
查看次数

如何有效地在Java中生成安全的随机字母数字字符串?

如何有效地在Java中生成安全的随机(或伪随机)字母数字字符串?

java security algorithm performance

18
推荐指数
5
解决办法
3万
查看次数

标识用户的令牌

我正在开发一个Android应用程序,我希望该应用程序的某些功能不是免费的.

我曾考虑过使用应用内Billing Version 3 API,因此我在开发者控制台中定义了"应用内商品".

阅读文档后,我知道当我开始购买流程时,我应该传入一个字符串令牌,帮助应用程序唯一地识别进行购买的用户.

但是我如何获得识别用户的字符串标记?

谢谢

android billing in-app-purchase in-app-billing android-billing

13
推荐指数
1
解决办法
1万
查看次数

在Java中生成全局唯一标识符

简介:我正在开发一个持久的Java Web应用程序,我需要确保我持有的所有资源都具有全局唯一标识符以防止重复.

精美印刷品:

  1. 我没有使用RDBMS,所以我没有任何花哨的序列生成器(例如Oracle提供的那个)
  2. 我希望它快速,最好全部在内存中 - 我宁愿不必打开一个文件并增加一些值
  3. 它需要是线程安全的(我预计一次只有一个JVM需要生成ID)
  4. 需要在JVM的实例化之间保持一致.如果服务器关闭并启动,ID生成器不应该重新生成它在先前实例化中生成的相同ID(或者至少机会必须真正,非常小 - 我预计会有数百万个预先存储的资源)
  5. 我已经看到了EJB唯一ID模式文章中的示例.它们不适用于我(我宁愿不仅仅依赖于System.currentTimeMillis(),因为我们将每毫秒保持多个资源).
  6. 我看过这个问题中提出的答案.我对它们的关注是,随着时间的推移,我将获得重复ID的可能性是多少?我对使用java.util.UUID作为UUID的建议很感兴趣,但同样,重复的可能性要小得无限.
  7. 我正在使用JDK6

java uuid persistence uniqueidentifier

12
推荐指数
1
解决办法
3万
查看次数

如何将用户身份验证放入移动应用程序

我对在移动应用中进行用户身份验证的最佳方式感兴趣.目前设置非常简单.我在应用程序上存储用户名和密码,并在每次需要运行受限查询时将其发送到api.

我觉得这可能是错误的方法.

当用户登录然后存储该用户的ID时,更好的方法是发送用户名和密码吗?这个问题是api接受用户ID而不是用户名和密码.用户ID将更容易"猜测",恶意用户可以通过随机选择的用户ID在其帐户下执行操作向api提交请求.我有一个api密钥.这足够安全吗?

问题是我想开始将twitter和facebook oauth整合到应用程序中.我没有读太多关于它的内容,但我认为你得到了一个"令牌".如何使用您建议的设置?在我自己的用户数据库中创建令牌并使用令牌(无论是我的,Facebook还是推特)作为授权会有好处吗?或者将每项服务分开并单独处理它们是否有意义?

谢谢.

iphone authentication mobile android

12
推荐指数
1
解决办法
6877
查看次数

在Java中将字符串编码为base32字符串

就像标题所说,我正在尝试将字符串"test"编码为Java中的base32字符串"ORSXG5A =".

我在网上搜索时发现的是从32位到字符串编码的类,但显然这不是我想要的.

对不起这个新手问题.

java base32

12
推荐指数
2
解决办法
2万
查看次数

如何在Java中生成长度为n的SecureRandom字符串?

我使用以下方法生成随机字符串:

private String generateSafeToken() {
    SecureRandom random = new SecureRandom();
    byte bytes[] = new byte[512];
    random.nextBytes(bytes);
    return bytes.toString();
}
Run Code Online (Sandbox Code Playgroud)

这给出了一个长度为11的字符串,例如[B@70ffc557.如何使上面的方法返回指定长度的字符串.例如20个字符?

java secure-random

12
推荐指数
1
解决办法
7426
查看次数

生成并保护礼品卡代码

我正在为一家生产礼品卡代码的公司工作,该代码可用于在网上商店支付货款.

我想知道生成这些礼品卡代码最安全的方法是什么.长度需要是16个字符(虽然可以协商)并且可以是字母数字(虽然数字会更加客户友好).

从我所看到的,最安全的方法是使用以下Java代码生成特定长度的礼品卡代码:

static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
static SecureRandom rnd = new SecureRandom();

String randomString( int len ){
   StringBuilder sb = new StringBuilder( len );
   for( int i = 0; i < len; i++ ) 
      sb.append( AB.charAt( rnd.nextInt(AB.length()) ) );
   return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

这取自这里的答案.我从字符串中删除了小写字母,使其更加用户友好.所以这产生了36 ^ 16种组合.单独的数字将是10 ^ 16种组合.我认为数字本身就够了,但经常强调,鉴于礼品卡欺诈越来越普遍,字符串应该是字母数字.

这就是问题一:数字还是字母数字?

当用户使用在线商店的礼品卡支付商品时,我们会拨打电话,返回该礼品卡的余额和货币.鉴于礼品卡代码是在第三方服务器上输入的,现在这些礼品卡可供有权访问这些服务器的人使用.在用户部分兑换之后仍然存在余额的情况下,这显然是一个问题.

一种选择是,当我们调用我们的API(使用礼品卡代码)以获得余额时,我们返回并在他们的商店中保存一个随机字符串,只有当他们向我们开帐单时才能由在线商店使用 - 我们会将其与我们系统上的礼品卡代码相匹配.问题可能是用户在结账时输入的礼品卡代码会记录在他们的日志中的某个位置,任何有权访问这些日志的人都可以访问.

另一个选择是我们在部分兑换后刷新礼品卡代码.因此,用户基本上获得了用于余额的新礼品卡代码,并且前一个被取消.这可能是最安全的,但不是那么用户友好.

这就是第二个问题:我们如何确保仅部分兑换的礼品卡代码仍然有价值?

java security fraud-prevention e-commerce

10
推荐指数
1
解决办法
761
查看次数

Java中的8个字符串唯一字符串

有没有办法在Java中生成8个字符长的随机和唯一的字符串?

String id = getRandomString();
Run Code Online (Sandbox Code Playgroud)

然后Id就是例如 wf41Av5g

java string

9
推荐指数
4
解决办法
2万
查看次数

在Java中生成字母数字随机字符串

我从另一个答案使用String Builder,但除了字母/数字,没有空格,标点符号等,我不能使用任何东西.你能解释一下如何限制这段代码中的字符集吗?另外,我如何确保它总是长达30个字符?

     Random generator = new Random();
    StringBuilder stringBuilder = new StringBuilder();
    int Length = 30;
    char tempChar ;
    for (int i = 0; i < Length; i++){
        tempChar = (char) (generator.nextInt(96) + 32);
        stringBuilder.append(tempChar);
Run Code Online (Sandbox Code Playgroud)

我已经查看了大多数其他答案,但无法找到解决方案.谢谢.如果这是重复的话,不要对我大喊大叫.大多数答案都没有解释代码的哪一部分控制生成的数字的长度或调整字符集的位置.

我也试过了stringBuilder.Replace('','1'),这可能有用,但是eclipse说没有替换StringBuilder的方法.

java string random alphanumeric

8
推荐指数
1
解决办法
3万
查看次数