Skip to content

Commit 8baa58a

Browse files
author
springdoc
committed
fixes #198
1 parent 2185836 commit 8baa58a

File tree

20 files changed

+451
-23
lines changed

20 files changed

+451
-23
lines changed

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
<module>springdoc-openapi-webflux-ui</module>
5757
<module>springdoc-openapi-kotlin</module>
5858
<module>springdoc-openapi-data-rest</module>
59+
<module>springdoc-openapi-security</module>
5960
</modules>
6061

6162
<properties>

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractParameterBuilder.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,13 @@
3131
@SuppressWarnings("rawtypes")
3232
public abstract class AbstractParameterBuilder {
3333

34-
protected final LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
34+
private final LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer;
35+
private final IgnoredParameterAnnotations ignoredParameterAnnotations;
3536

36-
public AbstractParameterBuilder(LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer) {
37+
38+
public AbstractParameterBuilder(LocalVariableTableParameterNameDiscoverer localSpringDocParameterNameDiscoverer, IgnoredParameterAnnotations ignoredParameterAnnotations) {
3739
this.localSpringDocParameterNameDiscoverer = localSpringDocParameterNameDiscoverer;
40+
this.ignoredParameterAnnotations = ignoredParameterAnnotations;
3841
}
3942

4043
Parameter mergeParameter(List<Parameter> existingParamDoc, Parameter paramCalcul) {
@@ -284,4 +287,8 @@ private boolean isExplodable(io.swagger.v3.oas.annotations.Parameter p) {
284287
private JavaType constructType(Type type) {
285288
return TypeFactory.defaultInstance().constructType(type);
286289
}
290+
291+
public boolean isAnnotationToIgnore(java.lang.reflect.Parameter parameter){
292+
return ignoredParameterAnnotations.isAnnotationToIgnore(parameter);
293+
}
287294
}

springdoc-openapi-common/src/main/java/org/springdoc/core/AbstractRequestBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ protected boolean isParamToIgnore(java.lang.reflect.Parameter parameter) {
110110
if (parameter.isAnnotationPresent(PathVariable.class)) {
111111
return false;
112112
}
113-
return isParamTypeToIgnore(parameter.getType());
113+
return parameterBuilder.isAnnotationToIgnore(parameter) || isParamTypeToIgnore(parameter.getType());
114114
}
115115

116116
private void setParams(Operation operation, List<Parameter> operationParameters, RequestBodyInfo requestBodyInfo) {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.springdoc.core;
2+
3+
public interface IgnoredParameterAnnotations {
4+
5+
default boolean isAnnotationToIgnore(java.lang.reflect.Parameter parameter) {
6+
return false;
7+
}
8+
9+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.springdoc.core;
2+
3+
import org.springframework.stereotype.Component;
4+
5+
@Component
6+
public class IgnoredParameterAnnotationsDefault implements IgnoredParameterAnnotations{
7+
8+
}

springdoc-openapi-common/src/main/java/org/springdoc/core/OpenAPIBuilder.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package org.springdoc.core;
22

3-
import static org.springdoc.core.Constants.DEFAULT_SERVER_DESCRIPTION;
4-
import static org.springdoc.core.Constants.DEFAULT_TITLE;
5-
import static org.springdoc.core.Constants.DEFAULT_VERSION;
6-
73
import io.swagger.v3.core.util.AnnotationsUtils;
84
import io.swagger.v3.core.util.ReflectionUtils;
95
import io.swagger.v3.oas.annotations.Hidden;
@@ -16,16 +12,6 @@
1612
import io.swagger.v3.oas.models.info.Info;
1713
import io.swagger.v3.oas.models.security.SecurityScheme;
1814
import io.swagger.v3.oas.models.servers.Server;
19-
import java.util.ArrayList;
20-
import java.util.HashMap;
21-
import java.util.HashSet;
22-
import java.util.List;
23-
import java.util.Locale;
24-
import java.util.Map;
25-
import java.util.Optional;
26-
import java.util.Set;
27-
import java.util.stream.Collectors;
28-
import java.util.stream.Stream;
2915
import org.apache.commons.lang3.StringUtils;
3016
import org.slf4j.Logger;
3117
import org.slf4j.LoggerFactory;
@@ -42,6 +28,12 @@
4228
import org.springframework.web.bind.annotation.RestController;
4329
import org.springframework.web.method.HandlerMethod;
4430

31+
import java.util.*;
32+
import java.util.stream.Collectors;
33+
import java.util.stream.Stream;
34+
35+
import static org.springdoc.core.Constants.*;
36+
4537
@Component
4638
public class OpenAPIBuilder {
4739

springdoc-openapi-kotlin/src/test/java/test/org/springdoc/api/app1/SpringDocTestApp.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package test.org.springdoc.api.app1;
22

3-
import io.swagger.v3.oas.models.Components;
43
import io.swagger.v3.oas.models.OpenAPI;
54
import io.swagger.v3.oas.models.info.Info;
65
import io.swagger.v3.oas.models.info.License;
7-
import io.swagger.v3.oas.models.security.SecurityScheme;
86
import org.springframework.boot.SpringApplication;
97
import org.springframework.boot.autoconfigure.SpringBootApplication;
108
import org.springframework.context.annotation.Bean;

springdoc-openapi-security/.gitignore

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
######################
2+
# Project Specific
3+
######################
4+
/target/www/**
5+
/src/test/javascript/coverage/
6+
7+
######################
8+
# Node
9+
######################
10+
/node/
11+
node_tmp/
12+
node_modules/
13+
npm-debug.log.*
14+
/.awcache/*
15+
/.cache-loader/*
16+
17+
######################
18+
# SASS
19+
######################
20+
.sass-cache/
21+
22+
######################
23+
# Eclipse
24+
######################
25+
*.pydevproject
26+
.project
27+
.metadata
28+
tmp/
29+
tmp/**/*
30+
*.tmp
31+
*.bak
32+
*.swp
33+
*~.nib
34+
local.properties
35+
.classpath
36+
.settings/
37+
.loadpath
38+
.factorypath
39+
/src/main/resources/rebel.xml
40+
41+
# External tool builders
42+
.externalToolBuilders/**
43+
44+
# Locally stored "Eclipse launch configurations"
45+
*.launch
46+
47+
# CDT-specific
48+
.cproject
49+
50+
# PDT-specific
51+
.buildpath
52+
53+
######################
54+
# Intellij
55+
######################
56+
.idea/
57+
*.iml
58+
*.iws
59+
*.ipr
60+
*.ids
61+
*.orig
62+
classes/
63+
out/
64+
65+
######################
66+
# Visual Studio Code
67+
######################
68+
.vscode/
69+
70+
######################
71+
# Maven
72+
######################
73+
/log/
74+
/target/
75+
76+
######################
77+
# Gradle
78+
######################
79+
.gradle/
80+
/build/
81+
82+
######################
83+
# Package Files
84+
######################
85+
*.jar
86+
*.war
87+
*.ear
88+
*.db
89+
90+
######################
91+
# Windows
92+
######################
93+
# Windows image file caches
94+
Thumbs.db
95+
96+
# Folder config file
97+
Desktop.ini
98+
99+
######################
100+
# Mac OSX
101+
######################
102+
.DS_Store
103+
.svn
104+
105+
# Thumbnails
106+
._*
107+
108+
# Files that might appear on external disk
109+
.Spotlight-V100
110+
.Trashes
111+
112+
######################
113+
# Directories
114+
######################
115+
/bin/
116+
/deploy/
117+
118+
######################
119+
# Logs
120+
######################
121+
*.log*
122+
123+
######################
124+
# Others
125+
######################
126+
*.class
127+
*.*~
128+
*~
129+
.merge_file*
130+
131+
######################
132+
# Gradle Wrapper
133+
######################
134+
!gradle/wrapper/gradle-wrapper.jar
135+
136+
######################
137+
# Maven Wrapper
138+
######################
139+
!.mvn/wrapper/maven-wrapper.jar
140+
141+
######################
142+
# ESLint
143+
######################
144+
.eslintcache

springdoc-openapi-security/pom.xml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<artifactId>springdoc-openapi</artifactId>
7+
<groupId>org.springdoc</groupId>
8+
<version>1.2.15-SNAPSHOT</version>
9+
</parent>
10+
<modelVersion>4.0.0</modelVersion>
11+
12+
<artifactId>springdoc-openapi-security</artifactId>
13+
14+
<dependencies>
15+
<!-- springdoc-common -->
16+
<dependency>
17+
<groupId>org.springdoc</groupId>
18+
<artifactId>springdoc-openapi-common</artifactId>
19+
<version>${project.version}</version>
20+
</dependency>
21+
<dependency>
22+
<groupId>org.springframework.security</groupId>
23+
<artifactId>spring-security-core</artifactId>
24+
</dependency>
25+
<dependency>
26+
<groupId>org.springdoc</groupId>
27+
<artifactId>springdoc-openapi-webflux-core</artifactId>
28+
<version>${project.version}</version>
29+
<scope>test</scope>
30+
</dependency>
31+
<dependency>
32+
<groupId>org.hibernate.validator</groupId>
33+
<artifactId>hibernate-validator</artifactId>
34+
<scope>test</scope>
35+
</dependency>
36+
</dependencies>
37+
38+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.springdoc.core;
2+
3+
import org.springframework.context.annotation.Primary;
4+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
5+
import org.springframework.stereotype.Component;
6+
import org.springframework.web.bind.annotation.PathVariable;
7+
8+
@Primary
9+
@Component
10+
public class IgnoredParameterAnnotationsWithSecurity implements IgnoredParameterAnnotations {
11+
12+
public boolean isAnnotationToIgnore(java.lang.reflect.Parameter parameter) {
13+
if (parameter.isAnnotationPresent(AuthenticationPrincipal.class)) {
14+
return true;
15+
}
16+
return false;
17+
}
18+
19+
}

0 commit comments

Comments
 (0)