Aller au contenu principal

FS Perso mit Keycloak?

Commentaires

3 commentaires

  • Zendesk API User
    Author: akyuzibr - 8/5/2021 14:19

    Hallo Ana,

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

    Vielen Dank und Grüße,
    Ibrahim

    0
  • Zendesk API User
    Author: ana_oleski - 8/5/2021 14:48

    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
  • Zendesk API User
    Author: akyuzibr - 8/6/2021 8:05

    Hallo,

    vielen Dank, das hilft mir schon weiter :smileyhappy:

    0

Vous devez vous connecter pour laisser un commentaire.