Kotlin+Gradle+JPA配置3.0swagger

http://localhost:8080/swagger-ui.html

放开keycloak权限

import com.umh.doctorreferral.api.security.CustomKeycloakAuthenticationProvider
import com.umh.doctorreferral.core.security.AppAuthority
import org.keycloak.adapters.KeycloakConfigResolver
import org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver
import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider
import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter
import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter
import org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.web.servlet.FilterRegistrationBean
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.http.HttpMethod
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
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.authority.mapping.GrantedAuthoritiesMapper
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper
import org.springframework.security.web.authentication.session.NullAuthenticatedSessionStrategy
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy
import org.springframework.web.cors.UrlBasedCorsConfigurationSource
import org.springframework.web.filter.CorsFilter
import java.util.*
import kotlin.jvm.Throws
       @Throws(Exception::class)
    override fun configure(http: HttpSecurity) {
        super.configure(http)

        http
            .csrf().disable()
            .exceptionHandling()
            .and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()
            .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
            .antMatchers(
                "/actuator/**",
                "/health",
                "/auth",
                "/test",
                "/dummy",
                "/referral"
            ).permitAll()//
            .antMatchers(
                "/v2/api-docs",
                "/configuration/ui",
                "/swagger-resources/**",
                "/configuration/security",
                "/swagger-ui.html",
                "/webjars/**"
            ).permitAll()//
            .antMatchers(
                HttpMethod.POST,
                "/password-reset",
                "/users/self/password-reset",
                "/password-reset-verification"
            ).permitAll()//
            //放开权限
            .antMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html").permitAll()
            .anyRequest()
            .hasAnyAuthority(*AppAuthority::class.java.declaredFields.map { it.name }.toTypedArray())
        http.addFilterBefore(corsFilter(), CorsFilter::class.java)
    }

 swaggerV3​​​​​​​

 

添加swagger3.0依赖(build gradle)

    // spring-boot-test
    testApi('org.springframework.boot:spring-boot-starter-test')
    // openapi
    api 'org.springdoc:springdoc-openapi-ui:1.5.8'
    // openapi-security
    api 'org.springdoc:springdoc-openapi-security:1.5.8'



    compile('org.springdoc:springdoc-openapi-ui:1.5.8')
    compile('org.springdoc:springdoc-openapi-security:1.5.8')

启动类配置

package com.umh.doctorreferral.api

import com.fasterxml.jackson.databind.MapperFeature
import com.umh.doctorreferral.core.audit.SpringSecurityAuditorAware
import com.umh.doctorreferral.core.config.CoreConfiguration
import com.umh.doctorreferral.core.jsonview.JsonViews
import com.umh.doctorreferral.core.properties.ApplicationProperties
import com.umh.doctorreferral.core.utils.ApplicationJsonObjectMapper
import io.swagger.annotations.Api
import io.swagger.v3.oas.models.Components
import io.swagger.v3.oas.models.OpenAPI
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder
import org.keycloak.OAuth2Constants
import org.keycloak.adapters.springboot.KeycloakSpringBootProperties
import org.keycloak.admin.client.Keycloak
import org.keycloak.admin.client.KeycloakBuilder
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.boot.web.servlet.ServletComponentScan
import org.springframework.cache.annotation.EnableCaching
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Import
import org.springframework.data.domain.AuditorAware
import org.springframework.data.domain.Pageable
import org.springframework.data.domain.Sort
import org.springframework.data.jpa.repository.config.EnableJpaAuditing
import org.springframework.http.MediaType
import org.springframework.http.converter.HttpMessageConverter
import org.springframework.http.converter.ResourceHttpMessageConverter
//增加
import org.springframework.http.converter.StringHttpMessageConverter
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter
import org.springframework.scheduling.annotation.EnableScheduling
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer
import springfox.documentation.builders.ParameterBuilder
import springfox.documentation.builders.PathSelectors
import springfox.documentation.builders.RequestHandlerSelectors
import springfox.documentation.schema.ModelRef
import springfox.documentation.service.ApiInfo
import springfox.documentation.spi.DocumentationType
import springfox.documentation.spring.web.plugins.Docket
import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc
import java.security.Security
import java.util.*


@EnableJpaAuditing
@EnableCaching
@EnableScheduling
@EnableSwagger2WebMvc
@SpringBootApplication
@Import(com.umh.doctorreferral.core.config.CoreConfiguration::class)
@ServletComponentScan("com.umh.doctorreferral")
open class ApiApplication : WebMvcConfigurer {

    @Autowired
    private lateinit var appProperties: ApplicationProperties


    @Bean
    fun api(): Docket? {
        return Docket(DocumentationType.SWAGGER_2)
                .directModelSubstitute(Locale::class.java, String::class.java)
                .directModelSubstitute(Sort::class.java, String::class.java)
                .directModelSubstitute(Sort::class.java, String::class.java)
                .directModelSubstitute(Pageable::class.java, Void::class.java)
                .globalOperationParameters(
                        listOf(
                                ParameterBuilder()
                                        .name("X-Auth-Token")
                                        .modelRef(ModelRef("string"))
                                        .parameterType("header")
                                        .required(true)
                                        .build()
                        )
                ).apiInfo(
                        ApiInfo(
                                "CASE CONNECT API",
                                null,
                                "1.0",
                                null,
                                null,
                                null,
                                null,
                                Collections.emptyList())
                )
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(Api::class.java))
                .paths(PathSelectors.any())
                .build()
                .enable(appProperties.environment?.toUpperCase() != "PROD")

    }

    @Bean
    internal fun auditorProvider(): AuditorAware<UUID> {
        return com.umh.doctorreferral.core.audit.SpringSecurityAuditorAware()
    }
    //增加
    @Bean
    fun customOpenAPI(): OpenAPI? {
        return OpenAPI()
            .components(Components())
            .info(
                Info().title("Referral System API").version("1.5.8")
                    .license(License().name("Apache 2.0").url("http://springdoc.org"))
            )
    }

    override fun configureMessageConverters(converters: MutableList<HttpMessageConverter<*>>) {
//        ActuatorMediaTypes()
        val supportedMediaTypes = ArrayList<MediaType>()
        supportedMediaTypes.add(MediaType.APPLICATION_JSON)
        supportedMediaTypes.add(MediaType.valueOf("application/vnd.spring-boot.actuator.v3+json"))
        supportedMediaTypes.add(MediaType.TEXT_PLAIN)
        val converter = MappingJackson2HttpMessageConverter()
        val objectMapper = ApplicationJsonObjectMapper()
        objectMapper.setConfig(objectMapper.serializationConfig.withView(JsonViews.Admin::class.java))
        objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true)

        converter.objectMapper = objectMapper
        converter.setPrettyPrint(true)
        converter.supportedMediaTypes = supportedMediaTypes
        //增加
        converters.add(0, StringHttpMessageConverter())
        converters.add(1, converter)
        converters.add(ResourceHttpMessageConverter())
    }

}

fun main(args: Array<String>) {
    Security.setProperty("crypto.policy", "unlimited")

    runApplication<ApiApplication>(*args)
}

controller

import io.swagger.v3.oas.annotations.Operation
import io.swagger.v3.oas.annotations.tags.Tag


@RestController
@Tag(name = "医生转介单", description = "医生转介单")
class DoctorReferralCaseController {

    @Autowired
    private lateinit var apiDoctorReferralCaseService : ApiDoctorReferralCaseService

    @Operation(summary = "医生列表搜索", description = "医生列表搜索")
    @GetMapping("/doctors")
    fun doctorSearch(doctorsRequest : DoctorsRequest) : Json? {
        return apiDoctorReferralCaseService.getDoctors(doctorsRequest)
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值