我在REST
应用程序中使用Keycloak
,带有spring-boot
。它工作正常,我在Keycloak
中定义了角色
,然后在我的Config.class我允许根据每个用户的角色访问我感兴趣的endpoint。我在尝试检索我后面的用户信息时遇到问题(姓名、委托人、权限...)。
我读过很多这样的帖子:
如何从钥匙中获取主体斗篷-安全-Spring-引导-应用程序
空指针-当-固定-Spring-引导-Rest-服务-带-键斗篷
但我找不到适合我的。如果使用SecurityContext或keydovearthenticationtoken,调用getAuthentication方法时会得到null。
在我的代码中,在控制器类中,我有以下内容:
private SecurityContext securityContext = SecurityContextHolder.getContext();
@GetMapping(value = "/getLicenses")
public ResponseEntity<List<License>> getLicenses() {
System.out.println("SecurityContext: " + securityContext);
System.out.println("Authentication securityContext: " + securityContext.getAuthentication());
return new ResponseEntity<List<License>>(licenseService.getLicenses(), null, HttpStatus.OK);
}
访问/获取许可证后,控制台的输出为:
SecurityContext: org.springframework.security.core.context.SecurityContextImpl@ffffffff: Null authentication
Authentication securityContext: null
我的KeyCloveSecurityConfig。班
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity( prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class KeycloakSecurityConfig extends KeycloakWebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(new SimpleAuthorityMapper());
auth.authenticationProvider(keycloakAuthenticationProvider);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf().disable();
http.authorizeRequests()
.antMatchers("/getLicenses").hasAnyRole("GUEST", "ADMIN", "SUPERADMIN")
.antMatchers("/getRevision/{id}").hasRole("SUPERADMIN")
.permitAll();
}
@Bean
@Override
protected SessionAuthenticationStrategy sessionAuthenticationStrategy() {
return new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl());
}
它工作得很好,如果我尝试使用“GUEST”角色用户访问/getRevision/{id}endpoint,它将不允许这样做。
我的yml具有BD连接、JPA和Keyclope连接:
keycloak.auth-server-url : XXXX
keycloak.realm: XXXX
keycloak.resource: login
keycloak.public-client: true
Keyclope有3个用户,有3个不同的角色(每个用户1个rol)。我可以用邮递员登录
有人知道我在尝试访问SecurityContext时为什么会为null吗?我的目标是检索用户数据
首次创建控制器时,您正在初始化控制器中的securityContext对象:
private SecurityContext securityContext = SecurityContextHolder.getContext();
此时,没有可用的安全上下文,这意味着上下文始终为空。
不要在控制器中使用私有变量来存储上下文,而是从getLicens
方法中的SecurityContextHolder
中获取它:
@GetMapping(value = "/getLicenses")
public ResponseEntity<List<License>> getLicenses() {
SecurityContext securityContext = SecurityContextHolder.getContext();
System.out.println("SecurityContext: " + securityContext);
System.out.println("Authentication securityContext: " + securityContext.getAuthentication());
return new ResponseEntity<List<License>>(licenseService.getLicenses(), null, HttpStatus.OK);
}
本文向大家介绍SpringBoot中获取微信用户信息的方法,包括了SpringBoot中获取微信用户信息的方法的使用技巧和注意事项,需要的朋友参考一下 前言 不知道你是否参加过拼多多上邀请微信好友砍价功能,这个功能实现首先需要考虑的就是获取微信用户的信息。获取用户信息就是获取公众号下微信用户的信息,今天我就来讲讲如何从公众号下获取微信用户信息。 需要声明一点的是获取微信公众号下的用户信息的权限是服
嗨,我尝试用InMemoryDao获取userDetailsService。但是我得不到,我试过@Autowired,@ Inject(userdailsservice,InMemoryDaoImpl,InMemoryManager...)但是我不能让它工作。 有公共类安全扩展WebSecurityC 只尝试了WebSecurityCon
我在我的nodejs应用程序中为注册用户在keybeat上实现了keybeat,我使用的登录API是: 如果用户名和密码正确,则返回登录用户的令牌, 现在我需要传递这个令牌(通过上面的API返回),并检查这个令牌是否正确,如果令牌正确,我需要用户详细信息,是否有用于此的API。 提前谢谢
我正在使用keycloak来保护我的servlet。我必须添加新角色并动态地将它们分配给用户。它使用管理应用编程接口在keycloak中工作,但是我不知道如何在servlet中获得特定用户的角色。 我尝试了这个解决方案,但我得到了空集:
问题内容: 所以我的Android Gallery中有3个文件夹。我正在尝试将这些文件夹的文件读入File数组,然后从那里将图像源转换为real 。 我的问题是引用文件数组时遇到问题。这是一些代码: 使用这些图像文件数组… 我的CreateList方法。错误是当我引用list.length时。 就像我说的那样,错误是当我使用list.length引用一个File数组时,例如我在第一个代码段中创建的
通过该接口可以获取指定用户的账户信息,地址为: http://spark.bokecc.com/api/user 需要传递以下参数: 参数 说明 userid 用户id,不可为空 format 返回格式,xml 或json 返回数据user包含如下字段: 字段名 说明 account 用户账户 version 版本信息 expired 到期时间 space 用户空间信息 traffic 用户流量信