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