|
38 | 38 | import io.swagger.v3.oas.models.parameters.RequestBody;
|
39 | 39 | import io.swagger.v3.oas.models.responses.ApiResponse;
|
40 | 40 | import io.swagger.v3.oas.models.responses.ApiResponses;
|
| 41 | +import org.apache.commons.lang3.reflect.FieldUtils; |
41 | 42 | import org.slf4j.Logger;
|
42 | 43 | import org.slf4j.LoggerFactory;
|
43 | 44 | import org.springdoc.core.customizers.OpenApiCustomizer;
|
|
58 | 59 | import org.springframework.security.web.SecurityFilterChain;
|
59 | 60 | import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
|
60 | 61 | import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
| 62 | +import org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter; |
61 | 63 | import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
|
62 | 64 | import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
|
63 | 65 |
|
@@ -110,13 +112,31 @@ OpenApiCustomizer springSecurityLoginEndpointCustomiser(ApplicationContext appli
|
110 | 112 | .filter(UsernamePasswordAuthenticationFilter.class::isInstance)
|
111 | 113 | .map(UsernamePasswordAuthenticationFilter.class::cast)
|
112 | 114 | .findAny();
|
| 115 | + Optional<DefaultLoginPageGeneratingFilter> optionalDefaultLoginPageGeneratingFilter = |
| 116 | + filterChain.getFilters().stream() |
| 117 | + .filter(DefaultLoginPageGeneratingFilter.class::isInstance) |
| 118 | + .map(DefaultLoginPageGeneratingFilter.class::cast) |
| 119 | + .findAny(); |
113 | 120 | if (optionalFilter.isPresent()) {
|
114 | 121 | UsernamePasswordAuthenticationFilter usernamePasswordAuthenticationFilter = optionalFilter.get();
|
115 | 122 | Operation operation = new Operation();
|
116 | 123 | Schema<?> schema = new ObjectSchema()
|
117 | 124 | .addProperty(usernamePasswordAuthenticationFilter.getUsernameParameter(), new StringSchema())
|
118 | 125 | .addProperty(usernamePasswordAuthenticationFilter.getPasswordParameter(), new StringSchema());
|
119 |
| - RequestBody requestBody = new RequestBody().content(new Content().addMediaType(org.springframework.http.MediaType.APPLICATION_JSON_VALUE, new MediaType().schema(schema))); |
| 126 | + String mediaType = org.springframework.http.MediaType.APPLICATION_JSON_VALUE; |
| 127 | + if(optionalDefaultLoginPageGeneratingFilter.isPresent()){ |
| 128 | + DefaultLoginPageGeneratingFilter defaultLoginPageGeneratingFilter = optionalDefaultLoginPageGeneratingFilter.get(); |
| 129 | + Field formLoginEnabledField = FieldUtils.getDeclaredField(DefaultLoginPageGeneratingFilter.class, "formLoginEnabled", true); |
| 130 | + try { |
| 131 | + boolean formLoginEnabled = (boolean) formLoginEnabledField.get(defaultLoginPageGeneratingFilter); |
| 132 | + if(formLoginEnabled) |
| 133 | + mediaType = org.springframework.http.MediaType.APPLICATION_FORM_URLENCODED_VALUE; |
| 134 | + } |
| 135 | + catch (IllegalAccessException e) { |
| 136 | + LOGGER.warn(e.getMessage()); |
| 137 | + } |
| 138 | + } |
| 139 | + RequestBody requestBody = new RequestBody().content(new Content().addMediaType(mediaType, new MediaType().schema(schema))); |
120 | 140 | operation.requestBody(requestBody);
|
121 | 141 | ApiResponses apiResponses = new ApiResponses();
|
122 | 142 | apiResponses.addApiResponse(String.valueOf(HttpStatus.OK.value()), new ApiResponse().description(HttpStatus.OK.getReasonPhrase()));
|
|
0 commit comments