- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Labels:
-
Developers
- Tags:
- personalisation
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo Ana,
ich stehe aktuell vor der selben Frage. Hast du eine Lösung gefunden?
Vielen Dank und Grüße,
Ibrahim
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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 🙂
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hallo,
vielen Dank, das hilft mir schon weiter

