Keycloak访问cookie和/或url查询params里面的freemarker模板

时间:2017-05-19 14:27:50

标签: freemarker keycloak

我想访问keycloak freemarker模板中的一些信息。我正在考虑两种方法。设置url参数并在freemarker模板中读取它们或将此信息设置为cookie并在模板中访问它们。

我已尝试访问所述herehere所述的网址参数。但两者都不起作用。 Keycloak数据模型不为当前Url提供任何getter。

这些方法之一可能吗?我怎样才能实现目标

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,我必须在自定义keycloak登录主题中访问查询参数。 (使用Keycloak版本2.1.0.Final)

我的登录网站没有传递查询参数。 但我在里面发现了

org.keycloak.forms.login.freemarker.FreeMarkerLoginFormsProvider

您可以访问以下查询参数:

  • 范围
  • response_type
  • redirect_uri
  • nonce
  • client_id
  • response_mode

可以使用

UriInfo uriInfo = session.getContext().getUri();
MultivaluedMap<String, String> queryParameters = uriInfo.getQueryParameters();

您可以像这样阅读查询参数redirect_uri

String redirectUri = queryParameters.getFirst("redirect_uri")

要将某些数据传递到模板,您必须使用

attributes.put("keyToData", dataForTemplate);
在您按

处理模板之前

freeMarker.processTemplate(attributes, Templates.getTemplate(page), theme);

然后在您的模板(例如template.ftl)中,您可以访问提供的数据,例如:

<#if keyToData!false == true> 
    ...
</#if>

很遗憾,我无法访问/auth内传递给我的keycloak FreeMarkerLoginFormsProvider端点的自定义查询参数。

答案 1 :(得分:0)

要获取查询参数,我使用了Javascript,因为我在使用自由标记时做得太多了

    <script type="text/javascript">
        const urlParams = new URLSearchParams(window.location.search);
        const myParam = urlParams.get('myParam');
    </script>

希望它会帮助某人