【发布时间】:2022-11-11 09:11:24
【问题描述】:
我正在尝试创建一个 GlobalFilter 来验证 RSA 令牌,但它给出了一个错误:
找不到能够从类型 [java.lang.String] 转换的转换器 键入 [java.security.interfaces.RSAPublicKey]
我的组件 LoggingGlobalPreFilter.java:
@Component public class LoggingGlobalPreFilter implements GlobalFilter { final Logger logger = LoggerFactory.getLogger(LoggingGlobalPreFilter.class); private RsaKeyPropreties Rsakeys; @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { logger.info("Pre-Filter executed"); String requestPath = exchange.getRequest().getPath().toString(); logger.info("Request path = " + requestPath); HttpHeaders headers = exchange.getRequest().getHeaders(); Set<String> headerNames = headers.keySet(); headerNames.forEach((header) -> { if(header.equals("Authorization")){ SignedJWT sign; try { String token = headers.get(header).toString(); if (token == null) { token=""; } sign = SignedJWT.parse(token); JWSVerifier verifier = new RSASSAVerifier(Rsakeys.publickey()); logger.info(header + " " + sign.verify(verifier)); } catch (ParseException | JOSEException e) { e.printStackTrace(); } } }); return chain.filter(exchange); } }我的应用程序类 RoutingApplication.java:
EnableConfigurationProperties(RsaKeyPropreties.class) @EnableDiscoveryClient @SpringBootApplication public class RoutingApplication { public static void main(String[] args) { SpringApplication.run(RoutingApplication.class, args); } }我的 Rsa 类 RsaKeyPropreties.java:
@ConfigurationProperties(prefix = "rsa") public record RsaKeyPropreties(RSAPublicKey publickey,RSAPrivateKey privatekey) { }我的应用程序属性:
rsa.publickey=classpath:routing/public.pem rsa.privatekey=classpath:routing/private.pem有谁知道解决此错误的方法?
【问题讨论】:
标签: spring-boot rsa