Un @ en una contraseña de proxy Java
Pasa la contraseña sin procesar a PasswordAuthentication y aplica la codificación URL solo al construir una URL de proxy real.
java.net.PasswordAuthentication recibe un nombre de usuario y una matriz de caracteres de contraseña. Pasa los caracteres originales de la contraseña:
var credential = new java.net.PasswordAuthentication(
"proxy-user", "p@ssword".toCharArray());
El valor es una contraseña ilustrativa. En el código de la aplicación, obtén los caracteres reales de la fuente de credenciales prevista.
Un @ dentro de esta contraseña es dato, porque la contraseña ya tiene su propio argumento. Convertirlo a p%40ssword antes del constructor entrega una contraseña distinta.
Una URL de proxy tiene otra representación de credenciales. En una URL como http://proxy-user:p%[email protected]:8080, el @ codificado pertenece a la información de usuario, mientras que el @ posterior separa esa información del host. Descodifica y codifica según la interfaz que realmente consume el valor.
Las comillas del shell, el escape de literales de cadena de Java y la codificación porcentual de URL también resuelven problemas de análisis distintos. Determina qué capa lee la entrada en lugar de codificar repetidamente las credenciales hasta que cambie el comportamiento de una petición.