如何将令牌从Nodejs传递到后端Java代码

时间:2018-10-29 05:07:39

标签: node.js spring-mvc jwt

我是Nodejs的新手。 我正在尝试将JWT令牌从Nodejs传递给Java服务类。 我在需要传递给spring mvc应用程序服务类的Node.js代码变量中获取JWT令牌。

有人可以帮我吗? 如果我将变量从Nodejs传递给Java,并且对如何将Nodejs与Java集成感到困惑?

节点代码是

module.exports = {
  verifyReq: function (req, res, next) {

    if (req.headers.authorization) {
      res.setHeader('Content-Type', 'text/html');
      res.write('<div id="_mscontent"><script src="URL"></script>');
      var notAuthorized = false;
      var authorization = req.headers.authorization;
      console.log("authorization: " + authorization);

      if (authorization) {
        req.isAuthorized = true;
      }
      try {
        var decodedJWT = JWT.decode(authorization.split(' ')[1], "", true);
      } catch (e) {
        notAuthorized = true;
      }
      else {
      req.isAuthorized = false;
      res.status(401); 
      res.end('Not Authorized!');
      return;
    }
   return req.isAuthorized === true;
  }
};

Java代码

public class GetCarAssetValuesService {
    private static String output;
    private static String token;
    private static Asset[] myObjects;

    public void getAssets(String tokenToPass)
            throws JsonParseException, JsonMappingException, IOException, JSONException {
        System.out.println("In service");
        HttpsURLConnection myURLConnection = null;
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader bufferedReader = null;
        StringBuilder strBuilder = new StringBuilder();
        JSONObject jsonObj = new JSONObject(tokenToPass);
        System.out.println("success_token= " + jsonObj);
        token = jsonObj.getString("access_token");
        System.out.println("Print token= " + token);
        try {

            URL url = new URL(
                    "Third Party URL");
            myURLConnection = (HttpsURLConnection) url.openConnection();
            String bearerAuth = "Bearer " + token;
            myURLConnection.setRequestProperty("Authorization", bearerAuth);
            myURLConnection.setRequestMethod("GET");
            myURLConnection.setRequestProperty("Content-Type", "application/json");
            myURLConnection.setDoOutput(true);
            inputStream = myURLConnection.getInputStream();
            inputStreamReader = new InputStreamReader(inputStream);
            bufferedReader = new BufferedReader(inputStreamReader);

            if (myURLConnection.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : " + myURLConnection.getResponseCode());
            }
            System.out.println("Here the control cars...");
            System.out.println("Output from Server .... \n");
            while ((output = bufferedReader.readLine()) != null) {
                strBuilder.append(output);
                System.out.println(output);
            }
            myURLConnection.disconnect();
        } catch (MalformedURLException e) {

            e.printStackTrace();

        } catch (UnknownHostException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }

        String mindsphereResponse = strBuilder.toString();
        System.out.println("Responsesssssss" + mindsphereResponse);

        ObjectMapper mapper = new ObjectMapper();

        myObjects = mapper.readValue(mindsphereResponse, Asset[].class);

    }

在这里,我不想传递“ tokenToPass”,而是希望从节点js即decodeJWT获得此令牌。我现在想从Node.js中获得其他Java服务提供的“ tokenToPass”。

在此先感谢.. !!!

1 个答案:

答案 0 :(得分:0)

您可以在HTTP请求标头(nodejs)中设置JWT令牌,并且可以从那里获取API端点(java)。

HelloController.java

@Controller
public class HomeController {

    @Autowire
    private HomeService homeService;

    @GetMapping("/hello")
    public String home(HttpServletRequest request, Model model) {
        helloService.invoke(request.getHeader('JWT_TOKEN_KEY'));
}
}

HelloService.java

@Service
public class HelloService {

    public void invoke(jwtToken) {
       // Use this jwttoken
}
}

NodeJS.js

var options = {
  host: 'your_java_api_endpoint',
  port: 80,
  path: '/hello',
  headers:{
    'JWT_TOKEN_KEY':'json web token here'
  }
};

http.get(options, function(res) {
  res.on("data", function(responseData) {
    console.log("data: " + responseData);
  });
}).on('error', function(e) {
  console.log("http error : " + e);
});