一、Swagger配置
1.添加依賴
<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version>
</dependency>
2.修改WebMvcConfig?
@Slf4j
@Configuration
@EnableSwagger2
@EnableKnife4j
public class WebMvcConfig extends WebMvcConfigurationSupport {@Overrideprotected void addResourceHandlers(ResourceHandlerRegistry registry) {log.info("開始進行靜態資源映射...");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");registry.addResourceHandler("/front/**").addResourceLocations("classpath:/front/");}/*** 擴展mvc框架的消息轉換器** @param converters*/@Overrideprotected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {log.info("擴展消息轉換器...");//創建消息轉換器對象MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();//設置對象轉換器,底層使用Jackson將Java對象轉為jsonmessageConverter.setObjectMapper(new JacksonObjectMapper());//將上面的消息轉換器對象追加到mvc框架的轉換器集合中converters.add(0, messageConverter);}@Beanpublic Docket createRestApi() {// 文檔類型return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.alibaba.reggie.controller")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("瑞吉外賣").version("1.0").description("瑞吉外賣接口文檔").build();}
}
3.修改LoginCheckFilter
@Slf4j
@WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*")
public class LoginCheckFilter implements Filter {// 路徑匹配器,支持通配符public static final AntPathMatcher PATH_MATCHER = new AntPathMatcher();@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;// 獲取到當前請求URIString requestURI = request.getRequestURI();// 白名單不攔截String[] urls = new String[]{"/employee/login","/employee/logout","/backend/**", // 放行靜態資源"/front/**","/user/sendMsg","/user/login",/*不登錄也能查看swagger文檔*/"/doc.html","/swagger-resources","/webjars/**","/v2/api-docs"};// 判斷本次請求是否需要處理boolean check = check(urls, requestURI);if (check) { // 不需要處理filterChain.doFilter(request, response);return;}// 瀏覽器:判斷登錄狀態,如果已登錄,則直接放行if (request.getSession().getAttribute("employee") != null) {// Session中找到登錄用戶,放行Long empId = (Long) request.getSession().getAttribute("employee");BaseContext.setCurrentId(empId);filterChain.doFilter(request, response);return;}// 移動端:判斷登錄狀態,如果已登錄,則直接放行if (request.getSession().getAttribute("user") != null) {// Session中找到登錄用戶,放行Long userId = (Long) request.getSession().getAttribute("user");BaseContext.setCurrentId(userId);filterChain.doFilter(request, response);return;}// 未登錄log.info("攔截到請求:{}", requestURI);// 返回未登錄結果,通過輸出流方式向客戶端頁面響應數據response.getWriter().write(JSON.toJSONString(R.error("NOTLOGIN")));}/*** @param urls* @param requestURI* @return*/public boolean check(String[] urls, String requestURI) {for (String url : urls) {boolean match = PATH_MATCHER.match(url, requestURI);if (match) {return true;}}return false;}
}
4.啟動項目后瀏覽器訪問
http://localhost:8081/doc.html#/home?
二、Swagger常用注解?
?