¡Continúe creando, acelere el crecimiento! Este es el tercer día de mi participación en el "Nuggets Daily New Plan · June Update Challenge", haz clic para ver los detalles del evento
Acabo de levantarme hoy y recibí 实施人员
una llamada mortal: 咋回事呢?表单数据咋保存不了了呢?
=_=
Buen chico, después de escuchar esto, me quedé ciego, estaba realmente calvo, ¡y llamé a la muerte por la mañana! ! !
Pensé para mis adentros, ¿amigo no parece estar haciendo nada? ¡Cual es la situación! ! !
Espera, lo pienso, parece que nacos未授权访问的漏洞
fue reparado ayer ¿Será por esto?
Luego volví rápidamente a la empresa y revisé el servidor. El bueno es realmente este, y seata cuelga. ¡Las transacciones distribuidas fallan, lo que hace que el formulario no se guarde! ! !
Este es de hecho el problema de un amigo, ¡no noté este problema! ! !
¿No se deducirá de los salarios? ? ?
Bien, hablemos de eso hoy, nacos habilita la autenticación y cambia la contraseña. Transacción distribuida de Seata, problema de falla de inicio, discusión e investigación. ! !
¡El problema de la falla de autenticación ha sido informado 403
y resuelto! ! !
1. Notas importantes
La versión en la que se presenta el problema tendrá seata
lo 1.4.2
siguiente .
Corrección de errores 2.nacos
La vulnerabilidad de acceso no autorizado de nacos se solucionó antes, se habilitó el acceso de autenticación de nacos y se modificó la contraseña.
vi nacos/conf/application.properties
#开启认证配置
nacos.core.auth.enabled=true
复制代码
Cambia la contraseña a:
nacos123!@
3. Asiento de salida
Se han cambiado las contraseñas de los archivos de configuración nacos123!@
, ¡pero no se puede activar seata! ! !
Seata ha integrado nacos como centro de configuración y centro de registro. No se discutirá en detalle cómo integrarlo aquí. Puede consultar aquí
Luego, encontré algunas respuestas en Internet, ¡se dice que la contraseña tiene caracteres especiales y se escapa! ! !
Bueno, entonces cambiemos la contraseña de nacos, cámbiela a nacos123
, elimine los símbolos especiales y pruébela:
Buen chico, la puesta en marcha fue exitosa, ¡este es realmente el problema! ! !
4. Análisis de causas
看到这里,咱们不禁得想一下,究竟是哪里对密码进行了转义呢?
有好奇心的同学,咱们继续往下看,从源码中分析一下,找到转义的代码。
开干!!!
seata源码构建。可以参考这里:点击查看,这里就不再一 一讲解了!!!
现在,咱们一步步进行debug调试:
- 直接启动server.java
启动报错了,NacosConfiguration出错了。那我们进入到NacosConfiguration类去看一下报错的地方。
这个错是NacosConfiguration输出的,我们可以通过输出的日志定位到具体的位置,但是这里没有,所以我们将断点,打到所有的logger上面来。
可以看到是NacosConfiguration.getLatestConfig方法打印的错误日志信息。
说明是configService.getConfig方法抛弃异常了,那我们进入configService.getConfig方法查看。
以上就是一步步调试,进入的方法图了,最终是NacosRestTemplate的execute方法,执行http请求,与nacos进行交互
那我们在execute方法,打个断点。
很明显,已经快要找到原因了,已经看到password,确实是被转义了。
接下来,对方法调用栈一步步往上找,即可。
很明显可以看到,就是这里的问题了:SecurityProxy类,login方法,
URLEncoder.encode(password, "utf-8")
注意:nacos-client的版本是1.3.3
原因找到了!!!
好的,看到这里,基本上,咱们就已经知道password被转义具体的原因了,也能知道是在哪里被转义了。
看到这里,咱们就有点奇怪了,seata版本是1.4.1,为啥用1.3.3版本的nacos-client呢?
难道这里,会有什么猫腻?
带着这个问题,我们看一下1.4.1
版本的nacos-client
的SecurityProxy
类。
Vea aquí, la versión 1.4.1 de nacos-client ya no codifica la contraseña.
¡Bien por usted! ! !
Entonces, pensé, ¿es esto un error oficial? Código fuente de la versión Seata1.4.1, ¿por qué usar la versión 1.3.3 de nacos-client para construirlo?
- Seata versión 1.4.1 en github: dependencia pom
De hecho, es el cliente nacos de la versión 1.3.3.
¿Todavía no te rindes, entonces echa un vistazo a la versión 1.4.2 de seata? : dependencias pom
La versión 1.4.2 de seata es también la versión 1.3.3 de nacos-client
Oficial, realmente te tengo! ! !
Solución final:
1. Actualizar la versión seata, al menos superior a 1.4.2. (No sé si la versión 1.5.1 solucionó este error o no. ¡Se lo daré a alguien que esté destinado a probarlo!)
2. Modificar la contraseña de nacos sin caracteres especiales.
3. Para el código fuente de seata de la versión 1.4.1, modifique la versión de nacos-client a 1.4.1 y reconstruya el servicio de seata. (¡No sé qué pozos habrá, se lo daré a alguien que esté destinado a probarlo!)
Al final, aquí estoy, no quiero tirar más, elige la segunda manera, ¡rápido! ! !
¡La simulación está completa! ! !
Bueno, el cambio de la contraseña de nacos ha provocado que seata no se inicie (análisis del código fuente), ¡así que aquí está! ! !
¡Estoy aquí primero hoy, rozando, rozando! ! ! ^_^
Si lo encuentras útil, ¡ayuda por favor 点个赞
! ! !