我有一个字节数组填充十六进制数字和打印它简单的方法是非常没有意义的,因为有许多不可打印的元素.我需要的是以下形式的确切十六进制代码:3a5f771c
我正在寻找一种在Jersey中启用基于令牌的身份验证的方法.我试图不使用任何特定的框架.那可能吗?
我的计划是:用户注册我的Web服务,我的Web服务生成令牌,将其发送到客户端,客户端将保留它.然后,对于每个请求,客户端将发送令牌而不是用户名和密码.
我在考虑为每个请求使用自定义过滤器,@PreAuthorize("hasRole('ROLE')")
但我只是认为这会导致很多请求数据库检查令牌是否有效.
或者不创建过滤器并在每个请求中放置一个参数令牌?这样每个API首先检查令牌,然后执行一些东西来检索资源.
我正在使用Eclipse.我有以下代码行:
wr.write(new sun.misc.BASE64Encoder().encode(buf));
Run Code Online (Sandbox Code Playgroud)
Eclipse将此行标记为错误.我导入了所需的库:
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
Run Code Online (Sandbox Code Playgroud)
我使用Apache Commons作为建议的解决方案,包括:
import org.apache.commons.*;
Run Code Online (Sandbox Code Playgroud)
并导入从以下网址下载的JAR文件:http://commons.apache.org/codec/
但问题仍然存在.Eclipse仍然显示前面提到的错误; 请指教.
我知道从Map的keySet()方法返回的Set不保证任何特定的顺序.
我的问题是,它是否保证多次迭代的相同顺序.例如
Map<K,V> map = getMap();
for( K k : map.keySet() )
{
}
...
for( K k : map.keySet() )
{
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,假设映射不修改,将迭代在按键组处于相同的顺序.使用Sun的jdk15它会以相同的顺序迭代,但在我依赖于这种行为之前,我想知道所有JDK是否都会这样做.
编辑
我从答案中看到我不能依赖它.太糟糕了.我希望不必为了保证我的订购而建立一些新的收藏品.我的代码需要迭代,执行一些逻辑,然后使用相同的顺序再次迭代.我将从keySet创建一个新的ArrayList,这将保证顺序.
我有一个名为对象Student,它有studentName,studentId,studentAddress,等有关studentId,我必须生成随机字符串包括七个数字charaters,例如.
studentId = getRandomId();
studentId = "1234567" <-- from the random generator.
Run Code Online (Sandbox Code Playgroud)
我必须确保没有重复的ID.
正如标题所示,我需要创建一个随机的,长度为17个字符的ID.像" AJB53JHS232ERO0H1" 这样的东西.字母和数字的顺序也是随机的.我想创建一个带有字母AZ和'check'变量的数组1-2.在循环中;
Randomize 'check' to 1-2.
If (check == 1) then the character is a letter.
Pick a random index from the letters array.
else
Pick a random number.
Run Code Online (Sandbox Code Playgroud)
但我觉得有一种更简单的方法可以做到这一点.在那儿?
我一直在寻找,最接近的答案是:如何生成一个随机的字母数字字符串?
我想根据这个CrackStation教程来遵循这个工作流程:
存储密码
使用CSPRNG生成长的随机盐.
将salt添加到密码中,并使用标准加密哈希函数(如SHA256)对其进行哈希处理.
将salt和hash都保存在用户的数据库记录中.
验证密码
从数据库中检索用户的salt和hash.
将salt添加到给定密码并使用相同的哈希函数对其进行哈希处理.
将给定密码的哈希值与数据库中的哈希值进行比较.如果匹配,则密码正确.否则,密码不正确.
我不知道如何生成SALT.我想出了如何使用MessageDigest生成哈希.我尝试使用SecureRandom,但nextByte方法产生乱码.
编辑:我不知道选择哪个答案,对我来说太复杂了,我决定使用jBCrypt; jBCript很容易使用,在幕后做所有复杂的事情.所以我会让社区投票给出最佳答案.
在我的Java EE6,REST服务上,我想使用身份验证令牌从移动设备登录,用户将发送他们的用户名,密码和服务器将发回一个令牌,这将用于授权用户他们对给定的进一步请求时间.
我可以像这样简单地创建一个令牌吗?(我想我不需要加密它,因为我将使用HTTPS.)
String token = UUID.randomUUID().toString().toUpperCase()
+ "|" + "userid" + "|"
+ cal.getTimeInMillis();
Run Code Online (Sandbox Code Playgroud)
或者有一种更标准的方式来创建我的令牌?也许它存在于API之一中