当前位置: 首页 > article >正文

SpringBoot的Swagger配置

一、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 {
    @Override
    protected 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
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("扩展消息转换器...");
        //创建消息转换器对象
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
        //设置对象转换器,底层使用Jackson将Java对象转为json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
        //将上面的消息转换器对象追加到mvc框架的转换器集合中
        converters.add(0, messageConverter);
    }

    @Bean
    public 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();

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        // 获取到当前请求URI
        String 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常用注解 

 


http://www.kler.cn/a/516736.html

相关文章:

  • 电路研究9.2——合宙Air780EP使用AT指令
  • Gin 学习笔记
  • WPF5-x名称空间
  • 【机器学习案列】探索各因素对睡眠时间影响的回归分析
  • 靶机复现-pikachu靶机文件包含漏洞
  • STM32更新程序OTA
  • Javaweb之css
  • 时序数据库的使用场景
  • openresty(nginx)+lua+kafka实现日志搜集系统
  • 【Redis】事务
  • Windows Docker Desktop安装及使用 Docker 运行 MySQL
  • elasticsearch segment数量对读写性能的影响
  • STM32_SD卡的SDIO通信_基础读写
  • 互联网产品品牌形象构建与开源AI智能名片S2B2C商城小程序的应用研究
  • Lock和Synchronized的区别,源码分析
  • 基于Springboot用axiospost请求接收字符串参数为null的解决方案
  • 【unity游戏开发之InputSystem——02】InputAction的使用介绍(基于unity6开发介绍)
  • 68,[8] BUUCTF WEB [RoarCTF 2019]Simple Upload(未写完)
  • JAVASE入门八脚-Spring ,时间Data,Dateformat,parse,Math,容器
  • Linux网络 | 网络计算器客户端实现与Json的安装以及使用
  • 深度剖析 PyTorch框架:从基础概念到高级应用的深度学习之旅!
  • OpenCV: 深入理解OpenCV中CV_WRAP_AS宏及其作用
  • 城市生命线安全保障:技术应用与策略创新
  • 使用 ECS服务器 和 vsCode 搭建远程开发站
  • Windows电脑不小心点击了关机,关机过程中如何阻止
  • 20250121面试鸭特训营第29天