いいえ、私は学ぶことができ、背後にある、私は追いつくことができます;秋、私は立ち上がることができます。私がやります!
問題のシナリオ:springbootプロジェクトでフィルタを設定するには、またswagger2アドレスにアクセスすることができない見つけswagger2、無ポップアップページ、以下を参照してくださいを統合します。
フィルタ・コードは次の通りであります:
パブリック クラス JwtAuthenticationFilterは延びOncePerRequestFilter { プライベート 静的 最終 PathMatcher pathMatcher = 新しいAntPathMatcherを(); @Override 保護 ボイドdoFilterInternal(HttpServletRequestのリクエスト、HttpServletResponseの応答れるFilterChainフィルターチェーン)が スローServletExceptionが、IOExceptionが{ 場合(StringUtils.contains(request.getServletPath()、 "闊歩" ) || StringUtils.contains(request.getServletPath()、「webjars " ) || StringUtils.contains(request.getServletPath()、 "V2" )){ IF(へrequest.getServerName()に等しい( "ローカルホスト" )){ filterChain.doFilter(リクエスト、レスポンス); } } 他{ IF (isExceededUrl(リクエスト)){ // 登録要求直接放出ログ filterChain.doFilter(リクエストを、応答); } 他{ // 取得Authorizationリクエストヘッダの 文字列tokenHeader = request.getHeader(TokenConstants.TOKEN_HEADER); // 返される存在しないトークン IF!(StringUtils.isBlank(tokenHeader)|| = tokenHeader.startsWith(TokenConstants .TOKEN_PREFIX)){ アウトServletOutputStreamをresponse.getOutputStreamを(); out.print(ResponseConstants.TOKEN_IS_INVALID)。 out.close(); 返します。 } // トークン过期返回 場合(JwtUtil.isExpiration(JwtUtil.getTokenByHeader(tokenHeader))){ ServletOutputStreamをアウト = response.getOutputStream()。 out.print(ResponseConstants.TOKEN_IS_INVALID)。 out.close(); 返します。 } 文字列UID = "" ; してみてください{ UID =を }JwtUtil.getUidByTokenHeader(request.getHeader(TokenConstants.TOKEN_HEADER))。 } キャッチ(例外e){ e.printStackTrace(); } request.setAttribute( "UID" 、UID)。 HttpServletRequestのREQ = (HttpServletRequestの)要求。 MutableHttpServletRequest mutableRequest = 新しいMutableHttpServletRequest(REQ)。 mutableRequest.putHeader( "UID" 、UID)。 filterChain.doFilter(リクエスト、レスポンス)。 } } / ** * @description:。私達は、アドレス/ API APIはチェックJWTは、そうでない場合は、ログイン/ログインJWTの始まりでも、URL一致参照を行う必要があります * Https://www.cnblogs.com/zhangxiaoguang/p/5855113.html * @param リクエスト * @return ブール * / プライベート ブールisProtectedUrl(HttpServletRequestのリクエスト){ 返す pathMatcher.match( "/ **" 、request.getServletPath()); } / ** * @description:登録はチェックしないでログ * @param リクエスト * @returnのブール * / プライベート・ ブールisExceededUrl(HttpServletRequestのリクエスト){ 戻り pathMatcher.match( "/ユーザ/ログイン" 、request.getServletPath()) || pathMatcher.match( "/ユーザ/登録" 、request.getServletPath())。 } }
問題はアクセスすることはできません解決するために、あなたはの静的リソースマッピングswagger2を追加する必要があります。
@Configuration パブリック クラス WebMvcConfigは実装WebMvcConfigurer { @Override 公共 ボイドaddResourceHandlers(ResourceHandlerRegistryレジストリ){ registry.addResourceHandler( "/static/**").addResourceLocations("classpath:/static/" )。 registry.addResourceHandler( "/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/" ); registry.addResourceHandler( "/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/" ); WebMvcConfigurer。スーパー.addResourceHandlers(レジストリ);
上記の内容はスプレーしないで好きではない、ビューの唯一の個人的なポイントを表します...