spring-boot - 在 Spring Boot 中从 LDAP 获取用户组
问题描述
我们的遗留应用程序部署在 Glassfish 上,用于javax.security
管理授权。
以下代码从LDAP
用户所属的 Active Director 组中检索:
try{
subject = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Principal principal;
if (subject != null) {
Iterator<Principal> principalsIt = subject.getPrincipals().iterator();
while (principalsIt.hasNext()) {
principal = principalsIt.next();
ldapGroups.add(principal.toString());
}
}
}catch (PolicyContextException e) {
...
}
在我们新的 Spring Boot 应用程序中,登录后,我们可以使用 SpringSecurityContextHolder
获取用户详细信息:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String currentPrincipalName = authentication.getName();
这是对用户进行身份验证和授权的方式:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private RedirectStrategy redirectStrategy = new DefaultRedirectStrategy();
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication().userSearchFilter("(...)")
.userSearchBase("...")
.groupSearchBase("...").groupSearchFilter("member={0}").contextSource()
.url("...").managerDn("...").managerPassword("...");
}
@Override
protected void configure(HttpSecurity security) throws Exception {
security.authorizeRequests().antMatchers("/*/**").permitAll().anyRequest().fullyAuthenticated().and()
.formLogin().loginPage("/login").successHandler(new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
redirectStrategy.sendRedirect(request, response, "/campaigns/myCampaigns");
}
});
}
}
有没有办法修改登录用户的代码,以便在他们被认证和授权的同时,它也同时检索他们的组。到目前为止,我发现的唯一示例涉及使用LdapTemplate
和单独调用。
谢谢
解决方案
推荐阅读
- javascript - for each 循环中的异步代码
- python - 如何将时间段与正则表达式匹配?
- ios - Xcode 启动图像源
- javascript - 浏览器中有关日期输入的语言环境
- python - cmake install 在安装opencv时指向最低python版本
- python - 如果满足 np.where,则将新列乘以数字
- java - 根据另一个字符串删除部分字符串
- maven - 自动更新多模块项目中的插件版本
- java - 无法使用 Webdriver Manager 在 Selenoid 中的 Chrome 容器上启动 Selenium 测试
- php - Docker 容器可以在除一个系统之外的所有系统上正常构建