您的位置:首页 > 编程语言 > Java开发

Grails, spring-security-core plugin:使用email登录

2012-08-14 17:05 585 查看
1. Implement the first requirement – Add an email address property to the user domain

This is really simple, just add the property to the domain class


Groovy代码



package org.customauth

class CustomUser {

String username

String password

String email

boolean enabled

boolean accountExpired

// *******

// the rest of the generated class contents

// *******

}

2. Implement the second requirement – Authenticate using the username or the email

In order to implement this requirement, I will have to implement a new UserDetailsService

Groovy代码



package org.customauth

import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUser

import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUserDetailsService

import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils

import org.springframework.security.core.authority.GrantedAuthorityImpl

import org.springframework.security.core.userdetails.UserDetails

import org.springframework.security.core.userdetails.UsernameNotFoundException

class CustomUserDetailsService implements GrailsUserDetailsService {

static final List NO_ROLES = [new GrantedAuthorityImpl(SpringSecurityUtils.NO_ROLE)]

UserDetails loadUserByUsername(String username, boolean loadRoles)

throws UsernameNotFoundException {

return loadUserByUsername(username)

}

UserDetails loadUserByUsername(String username)

throws UsernameNotFoundException {

CustomUser.withTransaction { status ->

CustomUser user = CustomUser.findByUsernameOrEmail(username, username)

if (!user)

throw new UsernameNotFoundException('User not found', username)

def authorities = user.authorities.collect {

new GrantedAuthorityImpl(it.authority)}

return new GrailsUser(user.username, user.password, user.enabled,

!user.accountExpired, !user.passwordExpired, !user.accountLocked,

authorities ?: NO_ROLES, user.id)

}

}

}

3. With the custom service in place, I need to register it in grails-app/conf/spring/resources.groovy by adding

Groovy代码



beans = {

userDetailsService(org.customauth.CustomUserDetailsService)

}

原文:/article/3766202.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: