我有一个JAX应用程序使用MP来提供一个使用OpenAPI OpenLiberty的UI。我的API是使用OAuth2隐式流进行验证的。这是当前使用注释配置的,如下所示:
@SecurityScheme(
securitySchemeName = JaxRsApplication.OAUTH2_SECURITY_SCHEME_NAME,
type = SecuritySchemeType.OAUTH2,
flows = @OAuthFlows(
implicit = @OAuthFlow(
authorizationUrl = "https://auth-server/connect/authorize",
scopes = @OAuthScope(name = "some-api-scope", description = "Some API Scope"))))我的目标是在配置文件中配置authorizationUrl值,而不是在注释中对其进行硬编码,这样我就可以将它作为CI/CD步骤配置到不同的服务器环境中。这能办到吗?
另外,是否有一种方法可以选择某些作用域并在OpenAPI UI中自动填充客户端id?
干杯。
发布于 2019-02-05 11:37:01
若要重写URL,请执行
对于微轮廓OpenAPI规范: OASFilter,我们可以重写authorizationUrl,如下所示:
package my.filter;
import org.eclipse.microprofile.config.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.openapi.OASFilter;
import org.eclipse.microprofile.openapi.models.security.SecurityScheme;
public class DemoOASFilter implements OASFilter {
@Override
public SecurityScheme filterSecurityScheme(final SecurityScheme securityScheme) {
Config config = ConfigProvider.getConfig();
String myUrl = config.getValue("my.url",
String.class);
securityScheme.getFlows().
getImplicit().
setAuthorizationUrl(myUrl);
return securityScheme;
}
}然后将我们的完全限定类名作为mp.openapi.filter的值放在META-INF/microprofile-config.properties中,如下所示
mp.openapi.filter=my.filter.DemoOASFilter
my.url=http://some/url不仅是为了覆盖authorizationUrl,OAuthFlow还为我们提供了重写tokenUrl、refreshUrl等等的功能。除了implicit之外,OAuthFlows还提供authorizationCode、clientCredentails和其他服务。此外,OASFilter接口也给我们提供了更多的覆盖,例如APIResponse、tag、server等等。
与Microprofile: Config集成
Config config = ConfigProvider.getConfig();
String myUrl = config.getValue("my.url",
String.class);我尝试将META-INF/microprofile-config.properties配置作为上面的示例,但没有实现,因为它给了我一个java.util.NoSuchElementException。
总之,实现了environment variable和system properties。
docker run -it \
--env my.url=http://some/url \
....
java -Dmy.url=http://some/url -jar ....https://stackoverflow.com/questions/54394218
复制相似问题