問題シナリオ
プロジェクトの操作中に、一部のリンクアクセスでエラーが報告され、エラープロンプトは次のようになります。
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)
この記事では、主にこのような状況の原因と解決策について説明します。
問題のある環境
ソフトウェア | バージョン |
---|---|
スプリングブーツ | 2.1.8。リリース |
問題の原因
これは実際にはピットです!!!
一般に、この種の問題が発生し、アイデアが見つからない場合は、シングルステップデバッグがそれを解決するための最速の方法です。GoogleやBaiduにアクセスする必要はありません。すべての人の状況が必ずしも同じであるとは限らず、他の人のブログでは問題が発生した状況が明確になっていない可能性があるためです。したがって、他の人が実行できるソリューションは、現在の環境には適していない可能性があります。!!
何度もジャンプした後、ついに理由を見つけました!プロジェクトが設定さXssFilter
れ、パラメータの機密文字が置き換えられることがわかりました。他の人はヘッダーを変換します、コードは次のとおりです:
public String getHeader(String name) {
String value = super.getHeader(xssEncode(name));
if (value != null) {
value = xssEncode(value);
}
return value;
}
リーダーで同様の問題が発生した場合は、パラメーター転送プロセス中に他のクラスがパラメーターを変換したために、問題が発生した可能性があります。!!
解決
ヘッダーから変換されたコードを変換せずにリファクタリングすると、元の文字に直接戻ります。
結果
問題をスムーズに解決してください!!!
総括する
問題が発生した場合は、ローカル環境があります。最初にデバッグを実行できます。あなたがそれを見つけることができないかもしれないので、オンラインで解決策を探さないでください!!!
賞賛を求める
私の記事がすべての人に役立つ場合は、記事の下部にある[いいね]または[お気に入り]をクリックできます。
良いディスカッションがある場合はメッセージを残すことができます。
今後の記事を引き続き表示する場合は、[フォロー
する]をクリックしてください。次のQRコードをスキャンして、私の公開アカウントをフォローできます:Fengye Zhixuege、私の最新の共有をチェックしてください!