gpt4 book ai didi

java - 从 inMemoryAuthentication() 中提取用户名 -WebSecurityConfigurerAdapter

转载 作者:行者123 更新时间:2023-12-02 00:57:45 25 4
gpt4 key购买 nike

我使用 SpringBoot 从事一个学校项目,并在添加了一些在互联网上看到的安全功能(WebSecurityConfigurerAdapter)后,我想知道是否有可能提取当前登录用户的用户名,因为我需要他的 ID在 Controller 的其他方法上为了从数据库中提取一些信息。

我的 SecurityConfig 类看起来像这样

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/*").access("hasRole('USER')")
.antMatchers("/admin/*").hasRole("ADMIN")
.and()
// some more method calls
.formLogin();
}


@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {

auth.inMemoryAuthentication().withUser("flaviu")
.password("yes").roles("USER");
}

@SuppressWarnings("deprecation")
@Bean
public static NoOpPasswordEncoder passwordEncoder() {
return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
}

}

最佳答案

检索当前经过身份验证的主体的最简单方法是通过静态调用 SecurityContextHolder:

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentUserName = authentication.getName();

在 Controller 中获取用户:

@Controller
public class SecurityController {

@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Principal principal) {
return principal.getName();
}
}

我们还可以使用身份验证 token :

@Controller
public class SecurityController {

@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Authentication authentication) {
return authentication.getName();
}
}

关于java - 从 inMemoryAuthentication() 中提取用户名 -WebSecurityConfigurerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61125332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com