我使用这个库Aut0JavaJWT实现了JSON Web令牌,用于使用Spring框架的REST API。
这是密码
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTCreationException;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.io.UnsupportedEncodingException;
public class JWTutils {
private final static String secret = "fj32Jfv02Mq33g0f8ioDkw";
public static String createToken(String email)
{
try {
return JWT.create()
.withIssuer("auth0")
.withClaim("email", email)
.sign(Algorithm.HMAC256(secret));
} catch (JWTCreationException exception){
throw new RuntimeException("You need to enable Algorithm.HMAC256");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage());
}
}
public static String getEmailInToken(String token)
{
try {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret))
.withIssuer("auth0")
.build();
DecodedJWT jwt = verifier.verify(token);
return jwt.getClaim("email").asString();
} catch (JWTDecodeException exception){
return null;
} catch (UnsupportedEncodingException e) {
return null;
}
}
}
只要我使用HTTPS,我的JWT安全吗?我应该使用有效期吗?
对
JWT是在客户端的计算机中放入加密的东西(比如cookie),然后它就是api的票据。(我们通常在OAuth中使用jwt)
您可以确保客户端计算机中的数据没有被修改。那么它是小型分布式会话管理的绝佳选择。
我应该使用有效期吗?
是的,特别是对于会话管理。您不希望一个用户永远登录,也许另一个用户能够窃取他的会话。这个令牌现在是他的用户名
安全吗?!
安全是有限制的,一个重要的限制是时间。每一个密码都是可破解的,但在它的时间里。你最好偶尔改变一下你的秘密。
虽然你的代码看起来很安全,但黑客还可以在许多其他情况下侵入你的系统并获取你的秘密。你也应该意识到这一点。代码的所有部分,包括系统,都必须具有可接受的安全级别。记得:
链条的强度取决于它最薄弱的一环
问题内容: 我觉得Java EE 6规范有点混乱。有几组注释。 我们有和一样的注释用于创建EJB。 还有一个用于创建托管的。 在和中有注释。 软件包中还有和注解。 为了使事情变得更复杂,有一个带有注释的程序包。 有人可以描述他们之间的关系吗? 我在哪里可以使用,或者注入其他bean? 问题答案: 首先让我做一些澄清: Managed bean definition:通常,托管bean是一个对象,其
问题内容: Java即将接近第7版。在我看来,必须有大量的教科书和培训手册在其中,它们教授基于旧版Java的方法,而现在所教的方法将具有更好的解决方案。 有哪些样板代码情况,特别是您看到人们通过习惯的力量实现的情况,您发现自己可以重构以利用最新版本的Java? 问题答案: 枚举。更换 与
问题内容: 我刚刚了解了Java的Scanner类,现在我想知道它如何与StringTokenizer和String.Split进行比较/竞争。我知道StringTokenizer和String.Split仅适用于字符串,那么为什么要对字符串使用扫描器?扫描仪是否仅打算一站式进行拆分? 问题答案: 他们本质上是课程的马。 设计用于需要解析字符串,提取不同类型数据的情况。它非常灵活,但是可以说它并没
问题内容: .class文件和.java文件有什么区别?我正在尝试使我的applet正常工作,但是目前我只能在Eclipse中运行它,尚不能嵌入HTML。谢谢 **编辑:那么如何使用JVM进行编译? 问题答案: .class文件是已编译的.java文件。 .java是所有文本,并且易于阅读。 .class是二进制文件(通常)。 通过转到命令行,导航到.java文件并运行,可以将Java文件编译为类
问题内容: 让clazz一些Class和obj一些Object。 是 总是和 ? 如果没有,有什么区别? 问题答案: 只要该对象表示的类是的超类或超接口,它就为。 只要对象是类的实例,它将为。 那是: 只要并且为非,就始终为真。
问题内容: 这个问题最好用一个例子来解释: 在Java中,对于JPA EntityManager,我可以执行以下操作(帐户是我的Entity类): 在Scala中,我的幼稚尝试是: 但是,当我尝试在Scala中使用时,似乎并不喜欢这样。如何在Scala中为Account类指定java.lang.Class对象? 问题答案: 根据“ Scala类型系统 ”, 该方法返回Scala类型的运行时表示形式
问题内容: 以下两个声明有什么区别? 是否可以将第一条语句视为静态方法的声明,而将第二条语句视为实例方法的声明,可以吗? 问题答案: 是的,第一个函数与该构造函数的对象实例没有关系,您可以将其视为 “静态方法” 。 在JavaScript中,函数是一对象,这意味着您可以像对待任何对象一样对待它们,在这种情况下,您只需向 函数object 添加属性。 第二个函数,当您扩展构造函数的原型时,将对使用该
问题内容: 我不明白注释和之间的实际区别是什么? 是扩展名还是它们具有完全不同的含义?什么时候应该使用它们?春天在业务层和 使用javax 在DAO? 谢谢回答。 问题答案: 几年前,Spring定义了自己的Transactional注释以使Spring bean方法具有事务性。 Java EE 7终于做了同样的事情,现在除了EJB方法之外,还允许CDI bean方法是事务性的。因此,从Java