Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Groovy & Grails > Custom UserDetailsService


Автор: ShurikA 15.2.2014, 13:32
Привет всем, 

В одном из моих проектов мне нужно расширить пользователя (User class) и добавить тип.

Добавили поле в модель:
Код

package com.iibs

import com.iibs.account.Account
import com.iibs.security.UserType;

class User {

    transient springSecurityService

    String username
    String password
    boolean enabled = true
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired
    UserType type = UserType.CUSTOMER
    
    Account account
    
    static transients = ['springSecurityService']
    
    static optionals = ['account']
    
    static constraints = {
        username blank: false, unique: true
        password blank: false
        account nullable: true
    }

    static mapping = {
        password column: '`password`'
        type column: '`type`', enumType: "ordinal"
    }

    Set<Role> getAuthorities() {
        UserRole.findAllByUser(this).collect { it.role } as Set
    }

    def beforeInsert() {
        encodePassword()
    }

    def beforeUpdate() {
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        password = springSecurityService.encodePassword(password)
    }
}


создали новый UserDetails:
Код

package com.iibs.security

import java.util.Collection;
import org.springframework.security.core.GrantedAuthority;
import grails.plugin.springsecurity.userdetails.GrailsUser
/**
 * This class defines custom User Details for this application
 * 
 * @author AlexAgulyansky
 */
class TypedUserDetails extends GrailsUser {
    
    final String type

    public TypedUserDetails(GrailsUser grailsUser) {
        super(grailsUser.username, grailsUser.password, grailsUser.enabled, grailsUser.accountNonExpired, grailsUser.credentialsNonExpired,
                grailsUser.accountNonLocked, grailsUser.authorities, grailsUser.id);
    }
}


создали новый UserDetailsService
Код

package com.iibs.security

import grails.plugin.springsecurity.SpringSecurityUtils
import grails.plugin.springsecurity.userdetails.GormUserDetailsService
import grails.plugin.springsecurity.userdetails.GrailsUser
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.GrantedAuthority

class TypedUserDetailsService extends GormUserDetailsService {
    
    @Override
    protected UserDetails createUserDetails(user, Collection<GrantedAuthority> authorities) {
        GrailsUser gUser = super.createUserDetails(user, authorities);
        
        TypedUserDetails userDetails = new TypedUserDetails(grailsUser)
        gUser = null
        
        userDetails.type = user.type.toString()
        
        return userDetails
    }
}


Когда прогоняю и пытаюсь сделать логин то оне просто сообщается что пользователь не найден.

Код

GrailsUser gUser = super.createUserDetails(user, authorities);


Возвращает валидного пользователя.

Код

TypedUserDetails userDetails = new TypedUserDetails(grailsUser)

Выподает, но не сообщая ничего. Даже в debug mode. 

Что я пропускаю?

Автор: ShurikA 15.2.2014, 13:51
Извините, ступил. Отдавал не определённую переменную. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)