In my a previous project I was told to do authentication using spring-security where user can login with username or email and both can be case insensitive. For implementing the same I did following:
First install the spring-security-core plugin in your application and configure it. If you are new for spring-security-core plugin then go through this blog and After configuring pluging Create a Groovy class in your src/groovy directory which looks like :

class UserDetail 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 {
        User.withTransaction { status ->
            User user = User.findByUsernameIlikeOrEmailIlike(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)
        }
    }

Here we have provide our own implementation for loading the user. And after doing that you have to define this class in your conf/spring/resources.groovy like

beans = {
    userDetailsService(com.yourpackage.UserDetail)
}

Here we are overriding the bean in spring. Now you are able to login with case insensitive username or email.

Hope this helps some one.