如何访问JWT令牌,然后处理请求?

时间:2019-06-02 05:54:41

标签: java rest api spring-boot xmlhttprequest

我已经获得了一个Spring Boot Web API项目。有一个flutter应用程序,它将作为请求发送jwt令牌,并且api必须从有效负载中获取“票证”值,然后检查数据库并发送所需的数据。我完全是这个领域的新手,但我别无选择,只能完成它。

我想通过仅接受令牌并尝试对其进行解码并获得“票证”值来简化此过程。但是我无法这样做,因为我一开始就无法获得令牌。 身份验证是由其他一些api完成的,它向flutter应用程序提供了jwt令牌。然后flutter应用程序将在任何请求中将该令牌发送给我的api。我有一个包含所需数据的示例数据库,并且必须使用数据库中的“票证”(充当用户名)来解决请求,并将提供数据。我不必执行任何身份验证部分-我只需要从请求中提取令牌-对其进行解码并获得“票证”值,就必须搜索数据库并提供数据。

reuest : localhost:8080/persons?access_token=eyJhbGciOiJIUzUxMiJ9.eyJ0aWNrZXQiOiJzdmxhZGFAZ21haWwuY29tIiwic2NvcGVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1BSRU1JVU1fTUVNQkVSIl0sImlzcyI6Imh0dHA6Ly9zdmxhZGEuY29tIiwiaWF0IjoxNDcyMzkwMDY1LCJleHAiOjE0NzIzOTA5NjV9.uaHqDrTNnn5TAljcWRYac9ifJJv5NR5cdn7id2xVCAKLD37_pY62jPlk70XtwqgSar03n2qEgzWyTdWXRcnsgQ

{{1}}

代码不是必需的,我只是想学习它是如何工作的。 YouTube中有很多视频,但是它们都集中在我不需要执行的身份验证上,并且都没有显示如何处理来自应用程序的请求。任何资源也将有很大的帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

reuest : localhost:8080/persons?access_token=eyJhbGciOiJIUzUxMiJ9.eyJ0aWNrZXQiOiJzdmxhZGFAZ21haWwuY29tIiwic2NvcGVzIjpbIlJPTEVfQURNSU4iLCJST0xFX1BSRU1JVU1fTUVNQkVSIl0sImlzcyI6Imh0dHA6Ly9zdmxhZGEuY29tIiwiaWF0IjoxNDcyMzkwMDY1LCJleHAiOjE0NzIzOTA5NjV9.uaHqDrTNnn5TAljcWRYac9ifJJv5NR5cdn7id2xVCAKLD37_pY62jPlk70XtwqgSar03n2qEgzWyTdWXRcnsgQ

根据上述要求,您可以如下设计控制器:

    @GetMapping("/persons")
        public ResponseEntity loadPersons(@RequestParam("access_token") String access_token,HttpServletRequest request){
         //Here you can play with the token now 

        //you can also get the token if it is coming with request header as follows :
           String token =request.getHeader("access_token");//replace with the specific key

        }

例如

public boolean isValidJWTToken(String jwtToken){
        boolean isValid = true;
        try {
            Jwts.parser().setSigningKey(generateKey()).parseClaimsJws(jwtToken);
        } catch (Exception e) {
            isValid = false;
        }
        return isValid;
    }
private Key generateKey() {

        byte[] keyBytes=environment.getProperty("auth.jwt.secret.key").getBytes();

        return new SecretKeySpec(keyBytes, 0,keyBytes.length,environment.getProperty("auth.jwt.secret.algo"));
    }

JWT令牌包含3个部分。

1. HEADER:ALGORITHM & TOKEN TYPE
2. PAYLOAD:DATA
3. SIGNATURE

以上三个部分都是您的业务驱动力。因此,您可以更好地知道哪种是用于编码的算法。因此,您可以进行解码。