ana_oleski
Returning Observer

FS Perso mit Keycloak?

Hallo Community,

hat jemand schon das Modul FS Perso mit Keycloak (https://www.keycloak.org/ ) benutzt?

Wenn ja, wäre für Tipps dankbar. Im Moment ist mir nicht mal klar, ob das überhaupt geht...

Schöne Grüße,

Ana

0 Kudos
3 Replies
akyuzibr
Occasional Observer

Hallo Ana,

ich stehe aktuell vor der selben Frage. Hast du eine Lösung gefunden?

Vielen Dank und Grüße,
Ibrahim

0 Kudos

Hi,

ich habe Keycloak wie in der (Keycloak) Doku eingebunden und dann für fs-perso noch eine Integration gebastelt.

1. GroupsModule interface implementieren

package com.nord.perso;

import de.espirit.firstspirit.opt.personalisation.modules.groups.GroupsModuleInterface;

import org.keycloak.KeycloakPrincipal;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import javax.servlet.ServletContext;

import javax.servlet.http.HttpServletRequest;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

import java.util.Set;

/**
*
*
* Stellt dem FirstSpirit personalisation Modul die Rollen der Benutzer zur Verfügung.
* Diese Rollen werden in entsprechenden (von fs-perso zur Verfügung gestellten) JSP Tags benutzt,
* um Inhalte ein und auszublenden.
*
* <fsp:isAuthorized userRange="loggedIn" groups="role1">
<p>
* Dieser Paragraph ist nur für Rolle 'role1' sichtbar
</p>
*</fsp:isAuthorized>

* @author Ana-maria Oleski, Evodion IT
*/
public class KeycloakGroupsModule implements GroupsModuleInterface
{

   private static Logger logger= LoggerFactory.getLogger(KeycloakGroupsModule.class);

   @Override
   public List<String> getGroups(Map<String, Object> map)

  {

   HttpServletRequest request = null;

   try
   {

  request = (HttpServletRequest) map.get("request");

   KeycloakPrincipal principal = (KeycloakPrincipal) request.getUserPrincipal();

   if (principal!=null)

  {

  request.getSession().setAttribute("userName", principal.getName());

   Set<String> roles = principal.getKeycloakSecurityContext().getToken().getRealmAccess().getRoles();

   List<String> result = new ArrayList<>();

   result.addAll(roles);

   return result;

  }

   throw new RuntimeException("No principal found in request");

  }

   catch (RuntimeException e)

  {

   logger.error("",e);

   throw e;

  }

  }

   @Override
   public void setServletContext(ServletContext servletContext)

  {

   logger.info("setServletContext " + servletContext);

  }

   @Override
   public void start()

  {

   logger.info("start");

  }

   @Override
   public void stop()

  {

   logger.info("stop");

  }

   @Override
   public void restart()

  {

   logger.info("restart");

  }

   @Override
   public void setAttribute(String name, String value)

  {

   logger.info("setAttribute " + name + " = " + value);

  }

}

2. KeycloakGroupsModule  in firstpersonalisation.xml benutzn

<LOGIN_PACKAGES>

  <LOGIN_PACKAGE name="FIRSTPersonalisation_Keycloak" priority="0">

  <LOGIN_MODULE
   class="de.espirit.firstspirit.opt.personalisation.modules.login.RequestHeaderLoginModule"
   name="Request Parameter Login">

  </LOGIN_MODULE>

  <GROUPS_MODULE class="com.nord.perso.KeycloakGroupsModule">

  </GROUPS_MODULE>

  </LOGIN_PACKAGE>

</LOGIN_PACKAGES>

Ich hoffe, das hilft dir 🙂

0 Kudos

Hallo,

vielen Dank, das hilft mir schon weiter Smiley Happy

0 Kudos