Skip to content

SpringBoot3整合knife4j+SpringSecurity

依赖引入

xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.5.0</version>
</dependency>
</dependencies>

配置

Knife4j配置

java
/**
 * Knife4j配置
 */
@Configuration
public class OpenapiConfig {
    // 配置相关内容
    @Bean
    public OpenAPI springShopOpenAPI() {
        return new OpenAPI()
                // 接口文档标题
                .info(new Info().title("SpringBoot")
                        .description("这是基于Knife4j OpenApi3的接口文档")   // 接口文档简介
                        .version("v1.0") // 接口文档版本
                        .contact(new Contact().name("zly").email("3065400350@qq.com"))) // 开发者联系方式
                .externalDocs(new ExternalDocumentation()
                        .description("SpringBoot基础框架")
                        .url("url"));
    }
}

SpringSecurity配置

java
package com.zly.framework.rbac.config;

import com.zly.framework.rbac.configuration.SysAuthConfiguration;
import com.zly.framework.rbac.configuration.SysJwtConfiguration;
import com.zly.framework.rbac.filter.CaptchaFilter;
import com.zly.framework.rbac.filter.JwtFilter;
import com.zly.framework.rbac.handler.failed.AccessDeniedExceptionHandler;
import com.zly.framework.rbac.handler.failed.AuthenticationEntryPointHandler;
import com.zly.framework.rbac.handler.failed.LoginFailureHandler;
import com.zly.framework.rbac.handler.success.LoginSuccessHandler;
import com.zly.framework.rbac.utils.JwtUtils;
import jakarta.annotation.Resource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

/**
 * SpringSecurity配置
 *
 * @author ZLY
 * @createtime 2024/6/1
 */
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(httpRequests -> {
                // 放行Knife4j
                    httpRequests.requestMatchers("/doc.html",
                                    "/webjars/**",
                                    "/v3/**",
                                    "/swagger-resources/**").permitAll()
                            .anyRequest().permitAll();
                })
                .csrf(Customizer.withDefaults())
                .cors(Customizer.withDefaults());
        return http.build();
    }
}

访问

knife4j_doc.png