当前位置: 首页 > 知识库问答 >
问题:

在grails 2.2.4 spring security Core2.0中配置ldap?

谯德佑
2023-03-14
grails.plugin.springsecurity.providerNames = ['ldapAuthProvider','anonymousAuthenticationProvider','rememberMeAuthenticationProvider']
grails.plugin.springsecurity.ldap.context.anonymousReadOnly = true
grails.plugin.springsecurity.ldap.context.server = "SOME LDAP ADRESS"
grails.plugin.springsecurity.ldap.authorities.groupSearchBase = 'ou=Employees,O=*****,C=****'

grails.plugin.springsecurity.ldap.search.base = 'O=****,C=****'
grails.plugin.springsecurity.ldap.authorities.retrieveGroupRoles = true
grails.plugin.springsecurity.ldap.authorities.retrieveDatabaseRoles = true
grails.plugin.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}'
grails.plugin.springsecurity.ldap.search.attributesToReturn = null

Spring Security核心是默认的:

// Added by the Spring Security Core plugin:
grails.plugin.springsecurity.userLookup.userDomainClassName = 'amelinium1.grails.SecUser'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'amelinium1.grails.SecUserSecRole'
grails.plugin.springsecurity.authority.className = 'amelinium1.grails.SecRole'
grails.plugin.springsecurity.controllerAnnotations.staticRules = [
    '/**':                              ['permitAll'],
    '/**/systeminfo':                 ['permitAll'],
    '/**/js/**':                      ['permitAll'],
    '/**/css/**':                     ['permitAll'],
    '/**/images/**':                  ['permitAll']]
grails.plugin.springsecurity.logout.postOnly = false

http://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/single.pdf上提供的文档似乎并不是最新的,即使是针对2.0版本的spring security Core。我尝试实现自定义GrailsUser和GrailsUserDetailsService,但它们似乎没有与插件的其他部分融合在一起。(基于文档的实现)。

任何人都可以通过一些关于如何在最新的2.0-RC2版本中实现LDAP的信息来为我指明正确的方向吗?

    class CustomUserDetailsService implements GrailsUserDetailsService{

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        User.withTransaction { status ->

            User user = User.findByUsername(username)
            if (!user) throw new UsernameNotFoundException('User not found', username)

            def authorities = user.authorities.collect {new GrantedAuthorityImpl(it.authority)}

            return new CustomUserDetails(user.username, user.password, user.enabled,
                    !user.accountExpired, !user.passwordExpired,
                    !user.accountLocked, authorities ?: NO_ROLES, user.id,
                    user.firstName, user.lastName)
        } as UserDetails
    }

    @Override
    public UserDetails loadUserByUsername(String username, boolean loadRoles)
            throws UsernameNotFoundException, DataAccessException {

        return loadUserByUsername(username);
    }

}
class CustomUserDetails extends GrailsUser{
        final String firstName
        final String lastName

        CustomUserDetails(String username, String password, boolean enabled,
                          boolean accountNonExpired, boolean credentialsNonExpired,
                          boolean accountNonLocked,
                          Collection<GrantedAuthority> authorities,
                          long id, String firstName, String lastName) {
            super(username, password, enabled, accountNonExpired,
                    credentialsNonExpired, accountNonLocked, authorities, id)

            this.firstName = firstName
            this.lastName = lastName
        }
    }

问题是我不能从LDAP中获得除了用户名作为LDAP登录以外的其他信息。也会很感激这里的帮助。在将应用程序重新工作到Customclasses上的beb ased后,我得到的错误如下:方法没有签名:static org.springframework.security.core.userdetails.user.findbyUsername()适用于参数类型:(java.lang.string)值:[hajduk]

共有1个答案

越麒
2023-03-14

默认情况下,Spring Security插件从数据库中获取用户和角色数据。负责读取用户和角色数据的Spring bean名为UserDetailsService。如果您想从其他地方获取用户和角色数据-例如LDAP-您只需要用您自己的bean替换这个bean。

import org.springframework.security.core.userdetails.*
import org.springframework.security.core.userdetails.UsernameNotFoundException
import org.springframework.dao.DataAccessException

class LdapUserDetailsService implements UserDetailsService {

    UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
        // load the user and their role(s) from LDAP by username and return their 
        // details as an instance of a class that implements the UserDetails interface
    }
}

不要忘记在resources.groovy中将该类注册为Spring bean

userDetailsService(LdapUserDetailsService)

有一些插件将Spring Security性与LDAP集成在一起,但我更愿意自己做,因为它非常容易。这些文档提供了一个自定义UserDetailsService示例。请注意,在编写自己的UserDetailsService/UserDetails实现时,不必扩展任何特定的类,而且出于调试的目的,直接实现接口可能更容易。

 类似资料:
  • 目标服务器正在使用自签名证书。是否有方法禁用认证检查?在另一个web服务器实例中,我们使用 在使用詹金斯时,是否可以有类似的选择?

  • 问题内容: 我的目标是配置,使其仅序列化带有注释的元素。 为了做到这一点,我按照下面的说明进行了说明,该说明说明了如何配置对象映射器。 我包括自定义描述objectmapper 这里。 但是,当类被序列化时,它仍包含json中的所有属性。 有人暗示吗?提前致谢 Jackson 1.8.0 spring 3.0.5 CustomObjectMapper servlet.xml NumbersOfNe

  • 我想在发布者的AEM 6中实现CA siteminder。它的工作方式是应用程序的最终用户将使用登录表单并进入应用程序。成功申请后,用户将登陆主页,在那里她将能够看到她的个人信息,如姓名、出生日期、病史和所有类型的数据。在提供错误的密码时,用户将收到错误消息。这就像任何正常的Web应用程序一样。这里的问题是所有用户信息都将来自后端,即Web服务。CRX中不会保存任何用户或最少的信息。我在sitem

  • 我刚刚开始使用Java EE。有人知道我在这里错过了什么吗?如果你需要更多的信息请告诉我。我正在使用intelliJ和JBoss EAP。 [2016-02-21 11:57:19,930]工件HelloWorld:War:工件部署期间出错。有关详细信息,请参阅服务器日志。[2016-02-21 11:57:19,931]项目helloworld:war:java.lang.exception:{

  • 我试图改变变量max_input_vars在我的php.ini文件通过指定 跑步 即使我在本地机器(C:\xampp\php\php.ini)和Homestead(/etc/php5/fpm/php.ini)上都将此变量设置为2500,我仍然会收到以下错误消息 我知道. htaccess覆盖php.ini在每个站点的基础上,是否有任何其他文件覆盖php.ini?是否有任何其他服务,需要重新加载后改

  • 我有Spring Boot(后端)应用程序,它在Tomcat(端口8080)和Angular应用程序(前端)(端口4200)上运行。 前端从后端使用rest API。如何使用带有SSL的Ngin x保护我的应用程序? 我听说我可以在nginx中将我的Spring Boot配置为反向代理,然后用SSL保护它,但我不知道怎么做。

  • 我目前正试图在我当前的Jhipster应用程序中实现ssl。到目前为止,我已经使用keytool-genkey-alias iroApp-storetype PKCS12-keyalg RSA-keysize 2048-keystore密钥库生成了一个证书。p12-有效期3650。 在application-dev.yml中,我更改了以下服务器选项: 致: 代理。conf.json:From }

  • 我知道在DispatcherServlet之外使用请求范围bean需要一些配置,并且已经阅读了http://docs.spring.io/spring/docs/4.0.x/spring-framework-reference/html/beans.html#beans-factory-scopes-oth,但是还没有成功: 对于Servlet3.0+,这可以通过WebApplicationIni