我正在使用keycloak来保护我的servlet。我必须添加新角色并动态地将它们分配给用户。它使用管理应用编程接口在keycloak中工作,但是我不知道如何在servlet中获得特定用户的角色。
我尝试了这个解决方案,但我得到了空集:
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
...
KeycloakSecurityContext context = (KeycloakSecurityContext)request.getAttribute(KeycloakSecurityContext.class.getName());
Set<String> roles = AdapterUtils.getRolesFromSecurityContext((RefreshableKeycloakSecurityContext) context);
...
}
如果servlet受keyclok保护,那么您可以使用以下API获取KeycloakSecurityContext
,然后访问角色的Set
来修改它。
KeycloakPrincipal principal = (KeycloakPrincipal) request.getUserPrincipal();
principal.getKeycloakSecurityContext().getToken().getRealmAccess().getRoles().add("Test-Role");
样例servlet请求可能是这样的。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
@SuppressWarnings("rawtypes")
KeycloakPrincipal principal = (KeycloakPrincipal)request.getUserPrincipal();
if (principal != null) {
//user has a valid session, we can assign role on the fly like this
principal.getKeycloakSecurityContext().getToken().getRealmAccess().getRoles().add("Test-Role");
}
}
@湿婆的回答对我不起作用。GetRealMacAccess()返回null。我们必须使用以下方法:
KeycloakPrincipal principal = (KeycloakPrincipal) request.getUserPrincipal();
String clientId = "securesite";
principal.getKeycloakSecurityContext().getToken().getResourceAccess(clientId).getRoles();
我正在尝试在我的Servlet 3.0 Web应用程序中使用Log4j2。即使按照官方留档配置了所有内容,我也无法看到日志。 这是我的web.xml: 我已将log4j2.xml文件放在WEB-INF/classes中: 这是我在类中调用logger的方式: 请告诉我我做错了什么。我甚至尝试过硬编码到log4j2的直接路径.xml,但仍然不起作用。
我正在尝试修改我在网上多个地方找到的KeyClope和Spring Boot教程中的代码(代码看起来已经被复制)。在任何情况下,尽管keybeapt保护正确的url,Spring Security性也很方便,但在尝试检索主体时,它返回为null。这是我的申请表。属性文件: 这是我的安全配置。java文件(教程中的原始文件): 我的web控制器如下所示: 最后,这是我的Maven配置,以防它有所不同
我在应用程序中使用,带有。它工作正常,我在中定义了,然后在我的Config.class我允许根据每个用户的角色访问我感兴趣的endpoint。我在尝试检索我后面的用户信息时遇到问题(姓名、委托人、权限...)。 我读过很多这样的帖子: 如何从钥匙中获取主体斗篷-安全-Spring-引导-应用程序 空指针-当-固定-Spring-引导-Rest-服务-带-键斗篷 但我找不到适合我的。如果使用Secu
我已经确定,最好的方法是使用应用程序拥有的常规驱动器帐户,如下所述: 使用普通Google帐户作为应用程序拥有的帐户 这要求我们为用户获取OAuth2凭据。上面链接的文章链接到了一篇关于这样做的第二篇文章:
问题内容: 我已经使用基于标准的基于wildfly的Keycloak适配器的Keycloak保护了企业应用程序。我面临的问题是,其余的Web服务在被调用时需要知道当前登录的用户名。如何从Keycloak获取登录的用户信息? 我尝试使用,等等。但是没有一个能够提供所需的详细信息。 问题答案: 您从安全上下文中获取所有用户信息。 例: 为了传播安全上下文,您必须具有如下配置的安全域: JBoss /
我做了一个C应用程序,它假设使用Kerberos身份验证来访问HDFS。这个应用程序的webserver也是用C编写的。 我正在尝试使用Kerberos票证在此应用程序中进行透明身份验证。 我使用以下命令对未经授权的用户进行了服务器响应: HTTP/1.1 401未经授权 WWW-认证:协商 浏览器会对标题中的授权字段做出反应,如下所示: 授权:协商Yiecgygkwybbqucoid/jCCA/