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

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

我有一个 Spring Security Servlet 过滤器,我想创建一个完整的 HATEOAS 链接到它。这是我尝试的结果(登录)。正如您所看到的,协议(protocol)和主机丢失了。在生产中,我需要正确处理协议(protocol)和主机(我已经设置了 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" )

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

最佳答案

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

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

关于java - 如何为过滤器创建 HATEOAS 链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39403685/

相关文章:

java - 抽象类的实例

java - Spring:BeanCreationException

java - Spring 使用 Redis @Cacheable

java - 将助记符 MARC 转换为常规 MARC

java - java中的数字金字塔

java - java中循环队列相对于栈的优势

java - 更改隔离级别 - hibernate.connection.isolation 不起作用

spring - 真的有必要将 Hystrix 与响应式(Reactive) spring boot 2 应用程序一起使用吗?

mysql - HikariCP 未释放事件的 MySql 连接

java - 有序双向链表//java