对于我当前的项目,我将使用Spring Boot设置REST API (最有可能使用BoxFuse运行)。 为了能够使用API端点,应用程序将检查传入的请求是否具有较早提供的有效JWT令牌 (由我信任的API服务提供)。
为了实现此功能,我想利用Spring Security,因为它与Spring Boot非常吻合。 在搜寻有关此组合的信息时,我遇到了一个很好地描述背景信息的网站 ,但没有提供使它运行所需的所有必要资源。 因此,经过更多调查和反复试验后,我终于找到了一个可行的解决方案。 请注意,在我的情况下,我仅需要验证传入的令牌,而无需创建或提供新的令牌。
示例的源代码可在此处在GitLab上找到。 该示例应用程序具有一个称为MainController的REST控制器。 启动应用程序后(通过运行Application .main方法),您可以使用以下地址访问REST端点: http:// localhost:8888 / hello?name = PalmApps 。 如您所见,如果在浏览器中尝试执行此操作,则会收到HTTP 401错误:
要访问端点,您将需要提供JWT令牌,以便可以通过JwtAuthenticationFilter进行访问 。 要生成有效令牌,请打开类JwtTokenGenerator的源并运行'main'方法,该方法将在控制台中打印令牌:
复制令牌并打开一个工具,您可以使用该工具发送HTTP请求,并将令牌添加到标头中,例如Postman :
有了令牌后,您将看到预期的输出:
{
"id": 2,
"content": "Hello, PalmApps!"
}
如果您通过POST请求访问端点http:// localhost:8888 / me (仍带有“ Authorization”标头),则将以JSON格式获取Principal对象的详细信息:
{
"details": null,
"authorities": [
{
"authority": "admin"
}
],
"authenticated": true,
"principal": {
"username": "Pascal",
"token": "eyJhbGciOiJIUzUxMeJ9.eyJzdwIiOi....m72LpFADA",
"authorities": [
{
"authority": "admin"
}
],
"password": null
},
"credentials": null,
"name": "Pascal"
}
返回对象中的“主要”字段是我们的AuthenticatedUser 。 如果我们想从我们的JWT中获取更多信息,那么我们可以简单地将其添加到该对象中,并将其填充到JwtAuthenticationProvider中 。
翻译自: https://www.javacodegeeks.com/2016/05/validating-jwt-spring-boot-spring-security.html