GrailsSpring安全默认配置:如何定义默认用户和密码

GrailsSpring安全默认配置:如何定义默认用户和密码,grails,spring-security,Grails,Spring Security,在纯净的春天,我可以这样做 <security:authentication-manager> <security:authentication-provider user-service-ref="customUserDetailsService"> <security:password-encoder ref="passwordEncoder"/> </security:authentication-provider> &

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

<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>

使用Spring安全插件在Grails中也可以这样做吗


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

这通常是在
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() }
      }
   }
}

您可以使用InMemoryUserDetailsManager(在resources.groovy中)来实现这一点:


您可以使用GrailsSpringSecurity提供的这些自定义标记

<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>

  • 注销
  • 登录
  • 报名
  • 包含一个示例,您可以利用
    InMemoryUserDetailsManager
    BooStrap.groovy
    创建用户

    下面是我在
    BootStrap.groovy
    中的内容(在本例中,我从环境变量加载密码):

    这是我的
    参考资料

    import org.springframework.security.provisioning.InMemoryUserDetailsManager
    import org.springframework.security.authentication.encoding.PlaintextPasswordEncoder
    
    beans = {
    
        userDetailsService(InMemoryUserDetailsManager,[])
        passwordEncoder(PlaintextPasswordEncoder)
    }
    
    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 = {
        }
    }
    
    import org.springframework.security.provisioning.InMemoryUserDetailsManager
    import org.springframework.security.authentication.encoding.PlaintextPasswordEncoder
    
    beans = {
    
        userDetailsService(InMemoryUserDetailsManager,[])
        passwordEncoder(PlaintextPasswordEncoder)
    }