出现这个主要是资源服务器配置,设置如下即可:
converter.setVerifierKey(publicKey);
//不设置这个会出现 Cannot convert access token to JSON
converter.setVerifier(new RsaVerifier(publicKey));
完整的配置如下
@Bean("resJwtAccessTokenConverter")
public JwtAccessTokenConverter resJwtAccessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessToken();
String publicKey = getPubKey();
converter.setVerifierKey(publicKey);
//不设置这个会出现 Cannot convert access token to JSON
converter.setVerifier(new RsaVerifier(publicKey));
return converter;
}
/**
* 获取非对称加密公钥 Key
*
* @return 公钥 Key
*/
private String getPubKey() {
Resource resource = new ClassPathResource(ResJWTTokenStore.PUBLIC_KEY);
try (BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()))) {
return br.lines().collect(Collectors.joining("\n"));
} catch (IOException ioe) {
return getKeyFromAuthorizationServer();
}
}
/**
* 通过访问授权服务器获取非对称加密公钥 Key
*
* @return 公钥 Key
*/
private String getKeyFromAuthorizationServer() {
ObjectMapper objectMapper = new ObjectMapper();
String pubKey = new RestTemplate().getForObject(resourceServerProperties.getJwt().getKeyUri(), String.class);
try {
Map map = objectMapper.readValue(pubKey, Map.class);
return map.get("value").toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}