问题解决:org.springframework.util.InvalidMimeTypeException: Invalid mime type “application/xhtml+xml“

问题场景

项目运行过程中,部分链接访问会报错,报错提示如下:

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)

本文主要是讲述该种情况发生的原因及解决方案!

问题环境

软件 版本
springboot 2.1.8.RELEASE

问题原因

这其实是一个坑!!!
在这里插入图片描述
一般遇到这种问题,找不出思路的话,单步调试是解决办法的最快办法。没必要去Google或者百度,因为每个人的情况不一定一致,其他人的博客也不一定将发生问题的环境说清楚。所以,别人可以的解决方案不一定适合当前环境!!!

经过重重跳转,终于发现了原因!原来是项目有设置了XssFilter,会将参数里面的敏感字符进行替换。其他会对抬头进行转换,代码如下:

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

    return value;
}

如果,有读者遇到类似的问题,说不定就是在参数传递过程中,有其他类对参数进行了转换,导致问题的发生!!!

解决方案

将抬头进行转换的代码进行重构,不进行转换,直接返回原来的字符!

结果

顺利解决问题!!!

总结

遇到问题,本地有环境,可以先单步调试。先不网上找解决方案,因为可能找不到!!!

随缘求赞

如果我的文章对大家产生了帮忙,可以在文章底部点个赞或者收藏;
如果有好的讨论,可以留言;
如果想继续查看我以后的文章,可以点击关注
可以扫描以下二维码,关注我的公众号:枫夜之求索阁,查看我最新的分享!
在这里插入图片描述
拜拜

猜你喜欢

转载自blog.csdn.net/u013084266/article/details/112463821
今日推荐