如何为过滤器创建HATEOAS链接?

时间:2016-09-09 04:03:05

标签: java spring spring-boot servlet-filters spring-hateoas

我有一个Spring Security Servlet Filter,我想创建一个完整的HATEOAS链接。这是我的尝试(登录)的结果。如您所见,缺少协议和主机。在制作中我需要正确处理协议和主机(我已设置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" )

如何使用与其他信息相同的信息创建此链接。

1 个答案:

答案 0 :(得分:1)

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和我的代理,我能够识别的唯一方法是识别我的代理是修复proto头,并将cloudfront添加到内部代理

server.tomcat.internal-proxies=\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}
server.tomcat.protocol-header=cloudfront-forwarded-proto