Search the FirstSpirit Knowledge Base
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
Hallo Ana,
ich stehe aktuell vor der selben Frage. Hast du eine Lösung gefunden?
Vielen Dank und Grüße,
Ibrahim
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 🙂
Hallo,
vielen Dank, das hilft mir schon weiter