spring boot ldap 组和受限端点

Posted

技术标签:

【中文标题】spring boot ldap 组和受限端点【英文标题】:spring boot ldap group and restricted endpoints 【发布时间】:2016-12-26 23:22:25 【问题描述】:

我想将某些休息端点限制为仅适用于某个组中的 LDAP 用户。

我按照指南 https://spring.io/guides/gs/authenticating-ldap/ 设置了运行良好的 LDAP 身份验证。那么如何限制某些休息端点呢?

我试过了

@PreAuthorize("hasRole('developers')")
@RequestMapping("/foo")
public String foo(HttpServletRequest request) 
    return "Welcome to FOO " + request.getRemoteUser();

但它仍然允许不在开发者组中的用户访问该端点

【问题讨论】:

【参考方案1】:

您可以将WebSecurityConfigurerAdapter 配置修改为:

@Override
protected void configure(HttpSecurity http) throws Exception 
    http
        .authorizeRequests()
            .anyRequest().fullyAuthenticated()
            .and()
            .antMatchers("/foo").hasRole("developers")
            .and()
        .formLogin();

我不太确定语法以及第一个规则是否会覆盖您的第二个规则,但它会类似于那个。

或者,您可以尝试逐个方法配置安全性,例如this sample。

【讨论】:

不,它仍然允许所有用户访问 /foo 如果您更改顺序,它似乎可以工作。 http.authorizeRequests().antMatchers("/foo").hasRole("DEVELOPERS").antMatchers("/**").fullyAuthenticated().and().formLogin().and().httpBasic();【参考方案2】:

@EnableGlobalMethodSecurity(securedEnabled=true) 需要添加到 webSecurityConfig。一旦我这样做了,我就可以使用@Secured("ROLE_DEVELOPERS"),然后该方法仅限于该角色。

【讨论】:

以上是关于spring boot ldap 组和受限端点的主要内容,如果未能解决你的问题,请参考以下文章

带有 LDAP 注销的 Spring Security 无法删除会话

Spring Boot 2.0.0.M4 OAuth2 令牌端点抛出 org.springframework.web.HttpRequestMethodNotSupportedException

Spring boot:提供公共和私有(受限)静态内容

Ldap 身份验证不适用于 Spring Boot

如何在Spring Boot中获取LDAP用户名

Spring Security - 在Spring Boot中针对LDAP使用Active Directory对用户进行身份验证