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();
}
}