如何为过滤器创建 HATEOAS link?
How can I create HATEOAS link for a Filter?
我有一个 Spring 安全 Servlet 过滤器,我想为它创建一个完整的 HATEOAS Link。这是我尝试(登录)的结果。如您所见,缺少协议和主机。在生产中,我需要正确处理协议和主机(我已经设置了 server.use-forward-headers=true
,所以如果我使用正确的来源,这对所有事情都应该没问题)
"_links" : {
"self" : {
"href" : "http://localhost/v0/public"
},
"registration" : {
"href" : "http://localhost/v0/public/registration"
},
"login" : {
"href" : "/v0/public/authentication/password"
}
我试过这个并编写了我自己的构建器,但它们都导致了上述情况
new Link( "/v0/public/authentication/password", "login" )
如何使用与其他所有相同的信息创建此 link。
TLDR
这是我想出的,但还有一些其他问题
BasicLinkBuilder.linkToCurrentMapping()
.slash( RouteConstants.PRIVATE )
.withRel( "private" );
这是我最初的解决方案,但我 运行 遇到了问题
@Override
protected List<Link> undiscoverableLinks( final ServletServerHttpRequest request ) {
UriComponentsBuilder uriBuilder = fromHttpRequest( request ).replacePath( RouteConstants.AUTH_PASS );
return Collections.singletonList( new Builder( uriBuilder ).withRel( "login" ) );
}
和建造者
static class Builder extends LinkBuilderSupport<Builder> {
Builder( final UriComponentsBuilder builder ) {
super( builder );
}
@Override
protected Builder getThis() {
return this;
}
@Override
protected Builder createNewInstance( final UriComponentsBuilder builder ) {
return new Builder( builder );
}
}
方法如下I get the ServletServerHttpRequest
我 运行 遇到的问题是关于 https 和我的代理,我能够识别 https 和我的代理的唯一方法是修复原型 header,并将云端添加到内部代理
server.tomcat.internal-proxies=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
server.tomcat.protocol-header=cloudfront-forwarded-proto
我有一个 Spring 安全 Servlet 过滤器,我想为它创建一个完整的 HATEOAS Link。这是我尝试(登录)的结果。如您所见,缺少协议和主机。在生产中,我需要正确处理协议和主机(我已经设置了 server.use-forward-headers=true
,所以如果我使用正确的来源,这对所有事情都应该没问题)
"_links" : {
"self" : {
"href" : "http://localhost/v0/public"
},
"registration" : {
"href" : "http://localhost/v0/public/registration"
},
"login" : {
"href" : "/v0/public/authentication/password"
}
我试过这个并编写了我自己的构建器,但它们都导致了上述情况
new Link( "/v0/public/authentication/password", "login" )
如何使用与其他所有相同的信息创建此 link。
TLDR
这是我想出的,但还有一些其他问题
BasicLinkBuilder.linkToCurrentMapping()
.slash( RouteConstants.PRIVATE )
.withRel( "private" );
这是我最初的解决方案,但我 运行 遇到了问题
@Override
protected List<Link> undiscoverableLinks( final ServletServerHttpRequest request ) {
UriComponentsBuilder uriBuilder = fromHttpRequest( request ).replacePath( RouteConstants.AUTH_PASS );
return Collections.singletonList( new Builder( uriBuilder ).withRel( "login" ) );
}
和建造者
static class Builder extends LinkBuilderSupport<Builder> {
Builder( final UriComponentsBuilder builder ) {
super( builder );
}
@Override
protected Builder getThis() {
return this;
}
@Override
protected Builder createNewInstance( final UriComponentsBuilder builder ) {
return new Builder( builder );
}
}
方法如下I get the ServletServerHttpRequest
我 运行 遇到的问题是关于 https 和我的代理,我能够识别 https 和我的代理的唯一方法是修复原型 header,并将云端添加到内部代理
server.tomcat.internal-proxies=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
server.tomcat.protocol-header=cloudfront-forwarded-proto