Resolución de problemas: org.springframework.util.InvalidMimeTypeException: tipo de mime no válido "application / xhtml + xml"

Escenario problemático

Durante la operación del proyecto, algunos accesos a enlaces reportarán errores y los mensajes de error son los siguientes:

org.springframework.http.InvalidMediaTypeException: Invalid mime type "application/xhtml+xml": Invalid token character '+' in token "xhtml+xml"
	at org.springframework.http.MediaType.parseMediaType(MediaType.java:534)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.springframework.http.MediaType.parseMediaTypes(MediaType.java:556)
	at org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping.getAcceptedMediaTypes(WelcomePageHandlerMapping.java:93)
	at org.springframework.boot.autoconfigure.web.servlet.WelcomePageHandlerMapping.getHandlerInternal(WelcomePageHandlerMapping.java:82)
	at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:401)
	at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1231)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1014)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1005)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:897)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:882)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.orm.hibernate5.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:155)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at com.common.filter.PermissionFilter.doFilter(PermissionFilter.java:74)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at pub.servlet.CsrfFilter.doFilter(CsrfFilter.java:55)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at pub.servlet.TokenLoginFilter.doFilter(TokenLoginFilter.java:91)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at pub.servlet.XssFilter.doFilter(XssFilter.java:89)

¡Este artículo describe principalmente las causas y soluciones de este tipo de situación!

Entorno problemático

software versión
springboot 2.1.8 LIBERACIÓN

causas del problema

¡Esto es en realidad un pozo! ! !
Inserte la descripción de la imagen aquí
Generalmente, si encuentra este tipo de problema y no puede encontrar una idea, la depuración en un solo paso es la forma más rápida de resolverlo. No es necesario ir a Google o Baidu, porque la situación de todos no es necesariamente la misma y los blogs de otras personas pueden no aclarar las circunstancias en las que ocurrió el problema. Por lo tanto, las soluciones que otros pueden hacer pueden no ser adecuadas para el entorno actual. ! !

Después de muchos saltos, ¡finalmente encontré la razón! Resulta que el proyecto se ha configurado XssFiltery los caracteres sensibles en los parámetros serán reemplazados. Otros convertirán el encabezado, el código es el siguiente:

public String getHeader(String name) {
    
    
    String value = super.getHeader(xssEncode(name));
    if (value != null) {
    
    
        value = xssEncode(value);
    }

    return value;
}

Si un lector encuentra un problema similar, puede ser que otras clases hayan convertido los parámetros durante el proceso de transferencia de parámetros, ¡lo que provocó que ocurra el problema! ! !

solución

Refactorice el código que se convirtió desde el encabezado, sin conversión, ¡regrese directamente al carácter original!

resultado

¡Resuelve el problema sin problemas! ! !

para resumir

Si encuentra un problema, hay un entorno local, puede realizar primero la depuración. No busque una solución en línea, ¡porque es posible que no la encuentre! ! !

Pedir elogios

Si mi artículo es útil para todos, puede hacer clic en Me gusta o en favorito en la parte inferior del artículo;
si hay una buena discusión, puede dejar un mensaje;
si desea continuar viendo mis artículos futuros, puede hacer clic en Seguirlo
. puede escanear el siguiente código QR para seguirme la cuenta pública: Fengye Zhixuege, ¡mira mi última acción!
Inserte la descripción de la imagen aquí
Adiós

Supongo que te gusta

Origin blog.csdn.net/u013084266/article/details/112463821
Recomendado
Clasificación