swagger2不能獲取頁面解決辦法


不會,我可以學;落后,我可以追趕;跌倒,我可以站起來;我一定行!

 

問題場景: 在springboot項目中配置過濾器, 同時也集成了swagger2, 發現swagger2的地址不能訪問, 沒有頁面彈出,參考以下:

過濾器代碼如下:

public class JwtAuthenticationFilter extends OncePerRequestFilter {

    private static final PathMatcher pathMatcher = new AntPathMatcher();

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {

        if (StringUtils.contains(request.getServletPath(), "swagger")
                || StringUtils.contains(request.getServletPath(), "webjars")
                || StringUtils.contains(request.getServletPath(), "v2")) {
            if (request.getServerName().equals("localhost")) {
                filterChain.doFilter(request, response);
            }
        } else {
            if (isExceededUrl(request)) {
                // 登錄注冊請求直接放行
                filterChain.doFilter(request, response);
            } else {
                // 獲取請求頭中的Authorization信息
                String tokenHeader = request.getHeader(TokenConstants.TOKEN_HEADER);

                // token不存在則返回
                if (StringUtils.isBlank(tokenHeader) || !tokenHeader.startsWith(TokenConstants.TOKEN_PREFIX)) {
                    ServletOutputStream out = response.getOutputStream();
                    out.print(ResponseConstants.TOKEN_IS_INVALID);
                    out.close();
                    return;
                }

                // token過期返回
                if (JwtUtil.isExpiration(JwtUtil.getTokenByHeader(tokenHeader))) {
                    ServletOutputStream out = response.getOutputStream();
                    out.print(ResponseConstants.TOKEN_IS_INVALID);
                    out.close();
                    return;
                }

                String uid = "";
                try {
                    uid = JwtUtil.getUidByTokenHeader(request.getHeader(TokenConstants.TOKEN_HEADER));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                request.setAttribute("uid", uid);

                HttpServletRequest req = (HttpServletRequest) request;
                MutableHttpServletRequest mutableRequest = new MutableHttpServletRequest(req);
                mutableRequest.putHeader("uid", uid);
                filterChain.doFilter(request, response);
            }
        }
    }

    /**
     * @Description:我們只對地址 /api 開頭的api檢查jwt. 不然的話登錄/login也需要jwt 做url匹配,參考
     *                     https://www.cnblogs.com/zhangxiaoguang/p/5855113.html
     * @param request
     * @return boolean
     */
    private boolean isProtectedUrl(HttpServletRequest request) {
        return pathMatcher.match("/**", request.getServletPath());
    }

    /**
     * @Description:登錄注冊不做校驗
     * @param request
     * @return boolean
     */
    private boolean isExceededUrl(HttpServletRequest request) {
        return pathMatcher.match("/user/login", request.getServletPath())
                || pathMatcher.match("/user/register", request.getServletPath());
    }

}

 

解決不能訪問的問題, 需要添加swagger2的靜態資源映射:

 

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        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.super.addResourceHandlers(registry);
    }
}

 

 

以上內容僅代表個人觀點,不喜勿噴...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM