【问题标题】:Grails Spring Security Default Configuration: How to define default user and passwordGrails Spring Security 默认配置:如何定义默认用户和密码
【发布时间】:2016-01-02 08:44:04
【问题描述】:

在纯净的春天我可以这样做

<security:authentication-manager>
<security:authentication-provider user-service-ref="customUserDetailsService">       
    <security:password-encoder ref="passwordEncoder"/>
</security:authentication-provider>
<security:authentication-provider>
    <security:user-service>
        <security:user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />
    </security:user-service>

有什么方法可以在 Grails 中使用 Spring Security 插件做同样的事情吗?

我可以实现自己的身份验证提供,但在这种情况下,我将在类中存储硬编码的凭据。

【问题讨论】:

    标签: grails spring-security


    【解决方案1】:

    This link 包含一个示例,您可以在其中利用InMemoryUserDetailsManagerBooStrap.groovy 创建用户。

    这是我在BootStrap.groovy 中的内容(在这种情况下,我从环境变量中加载密码):

    import org.springframework.security.provisioning.UserDetailsManager
    import org.springframework.security.core.authority.SimpleGrantedAuthority
    import org.springframework.security.core.userdetails.User
    import org.springframework.security.core.userdetails.UserDetails
    
    class BootStrap {
    
        UserDetailsManager userDetailsService
    
        def init = { servletContext ->
    
            UserDetails user1 = new User('user1', "${System.getenv("USER1_PWD")}", [new SimpleGrantedAuthority('ROLE_USER')])
            userDetailsService.createUser(user1)
    
            UserDetails user2 = new User('user2', "${System.getenv("USER2_PWD")}", [new SimpleGrantedAuthority('ROLE_USER')])
            userDetailsService.createUser(user2)
    
        }
        def destroy = {
        }
    }
    

    这是我的resources.groovy

    import org.springframework.security.provisioning.InMemoryUserDetailsManager
    import org.springframework.security.authentication.encoding.PlaintextPasswordEncoder
    
    beans = {
    
        userDetailsService(InMemoryUserDetailsManager,[])
        passwordEncoder(PlaintextPasswordEncoder)
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用 grails spring security 提供的这些自定义标签。

      <sec:ifLoggedIn>
      <li><a><sec:username /></a></li>
      <li><g:link controller="logout">Logout</g:link></li>
      </sec:ifLoggedIn>
      <sec:ifNotLoggedIn>
      <li><g:link controller='controller' action='action'>Login</g:link></li>
      <li><g:link controller="controller" action="action">Signup</g:link></li>
      </sec:ifNotLoggedIn>
      

      【讨论】:

        【解决方案3】:

        您可以使用 InMemoryUserDetailsManager(在 resources.groovy 中)来完成:

        import org.springframework.security.provisioning.InMemoryUserDetailsManager
        import org.springframework.security.core.userdetails.User
        import org.springframework.security.core.authority.SimpleGrantedAuthority
        
        beans = {
            userDetailsService(InMemoryUserDetailsManager,
                    [new User('admin', 'password hash', [new SimpleGrantedAuthority('ROLE_ADMIN')])])
        }
        

        【讨论】:

        【解决方案4】:

        通常这是在BootStrap.groovy 中完成的,例如

        import com.foo.Role
        import com.foo.User
        import com.foo.UserRole
        
        class BootStrap {
        
           def init = {
              def userRole = Role.findOrSaveByAuthority('ROLE_USER')
              def adminRole = Role.findOrSaveByAuthority('ROLE_ADMIN')
        
              if (!User.findByUsername('admin')) {
                 def admin = new User(username: 'admin', password: 'admin').save()
        
                 UserRole.create admin, userRole
                 UserRole.create admin, adminRole
        
                 User.withSession { it.flush() }
              }
           }
        }
        

        【讨论】:

          猜你喜欢
          • 2018-01-15
          • 2019-03-23
          • 2014-07-04
          • 1970-01-01
          • 2022-12-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-06
          • 1970-01-01
          相关资源
          最近更新 更多