|
35 | 35 | import io.swagger.v3.oas.models.parameters.RequestBody; |
36 | 36 | import io.swagger.v3.oas.models.responses.ApiResponse; |
37 | 37 | import io.swagger.v3.oas.models.responses.ApiResponses; |
| 38 | +import org.apache.commons.lang3.reflect.FieldUtils; |
38 | 39 | import org.slf4j.Logger; |
39 | 40 | import org.slf4j.LoggerFactory; |
40 | 41 | import org.springdoc.core.SpringDocConfiguration; |
|
56 | 57 | import org.springframework.security.web.SecurityFilterChain; |
57 | 58 | import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter; |
58 | 59 | import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; |
| 60 | +import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter; |
59 | 61 | import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; |
60 | 62 | import org.springframework.security.web.util.matcher.AntPathRequestMatcher; |
61 | 63 |
|
@@ -132,13 +134,31 @@ OpenApiCustomiser springSecurityLoginEndpointCustomiser(ApplicationContext appli |
132 | 134 | .filter(UsernamePasswordAuthenticationFilter.class::isInstance) |
133 | 135 | .map(UsernamePasswordAuthenticationFilter.class::cast) |
134 | 136 | .findAny(); |
| 137 | + Optional<DefaultLoginPageGeneratingFilter> optionalDefaultLoginPageGeneratingFilter = |
| 138 | + filterChain.getFilters().stream() |
| 139 | + .filter(DefaultLoginPageGeneratingFilter.class::isInstance) |
| 140 | + .map(DefaultLoginPageGeneratingFilter.class::cast) |
| 141 | + .findAny(); |
135 | 142 | if (optionalFilter.isPresent()) { |
136 | 143 | UsernamePasswordAuthenticationFilter usernamePasswordAuthenticationFilter = optionalFilter.get(); |
137 | 144 | Operation operation = new Operation(); |
138 | 145 | Schema<?> schema = new ObjectSchema() |
139 | 146 | .addProperty(usernamePasswordAuthenticationFilter.getUsernameParameter(), new StringSchema()) |
140 | 147 | .addProperty(usernamePasswordAuthenticationFilter.getPasswordParameter(), new StringSchema()); |
141 | | - RequestBody requestBody = new RequestBody().content(new Content().addMediaType(org.springframework.http.MediaType.APPLICATION_JSON_VALUE, new MediaType().schema(schema))); |
| 148 | + String mediaType = org.springframework.http.MediaType.APPLICATION_JSON_VALUE; |
| 149 | + if(optionalDefaultLoginPageGeneratingFilter.isPresent()){ |
| 150 | + DefaultLoginPageGeneratingFilter defaultLoginPageGeneratingFilter = optionalDefaultLoginPageGeneratingFilter.get(); |
| 151 | + Field formLoginEnabledField = FieldUtils.getDeclaredField(DefaultLoginPageGeneratingFilter.class, "formLoginEnabled", true); |
| 152 | + try { |
| 153 | + boolean formLoginEnabled = (boolean) formLoginEnabledField.get(defaultLoginPageGeneratingFilter); |
| 154 | + if(formLoginEnabled) |
| 155 | + mediaType = org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE; |
| 156 | + } |
| 157 | + catch (IllegalAccessException e) { |
| 158 | + LOGGER.warn(e.getMessage()); |
| 159 | + } |
| 160 | + } |
| 161 | + RequestBody requestBody = new RequestBody().content(new Content().addMediaType(mediaType, new MediaType().schema(schema))); |
142 | 162 | operation.requestBody(requestBody); |
143 | 163 | ApiResponses apiResponses = new ApiResponses(); |
144 | 164 | apiResponses.addApiResponse(String.valueOf(HttpStatus.OK.value()), new ApiResponse().description(HttpStatus.OK.getReasonPhrase())); |
|
0 commit comments