Login Case Insensitive (Spring Security)
05/05/2014 15:36
0
Alguem sabe como fazer o UserName ficar Case Insensitive?
Tags: UserName,Insensitive,Spring Security


0
Não sei exatamente como fazer, mas estes links podem te ajudar:
http://grails.1312388.n4.nabble.com/Spring-Security-Plugin-Case-insensitive-usernames-td3811436.html
http://grails-plugins.github.io/grails-spring-security-core/docs/manual/guide/userDetailsService.html
http://forum.spring.io/forum/spring-projects/security/80861-question-about-spring-login-case-sensitivity
05/05/2014 17:19


0
Muito obrigado Dyego, consegui fazer, depois eu posto a solução!
10/07/2014 12:43


2
A solução que eu encontrei utilizando os links do Dyego foi:

na pasta "scr/groovy" do projeto eu criei um arquivo chamado "CustomUserDetailsService.groovy"

com o seguinte conteudo

import org.codehaus.groovy.grails.plugins.springsecurity.GrailsUserDetailsService
import org.springframework.dao.DataAccessException
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.security.core.userdetails.UsernameNotFoundException
import org.springframework.security.core.authority.SimpleGrantedAuthority
import grails.plugin.springsecurity.SpringSecurityUtils
import org.springframework.security.core.GrantedAuthority
import grails.plugin.springsecurity.userdetails.GrailsUser
import grails.plugin.springsecurity.userdetails.GrailsUserDetailsService

class CustomUserDetailsService implements GrailsUserDetailsService {

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

@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
return loadUserByUsername(username,true)
return null;
}

@Override
public UserDetails loadUserByUsername(String username, boolean loadRoles)
throws UsernameNotFoundException, DataAccessException {

Usuario user = Usuario.findByUsernameIlike(username) // Usuario = Domain do usuario

if (!user) {
throw new UsernameNotFoundException('User not found',username)
}

return new GrailsUser(user.username,
user.password,
user.enabled,
!user.accountExpired,
!user.passwordExpired,
!user.accountLocked,
NO_ROLES,
user.id)
}
}


e no arquivo "Grails-app/Conf/Spring/resources.groovy" eu coloquei assim:


// Place your Spring DSL code here
beans = {
userDetailsService(com.controle.CustomUserDetailsService)
}



Não sei se é a melhor forma de fazer isso.. porem funcionou! =)
14/07/2014 22:40


0
Um simples Filter não teria sido mais simples?


0
José, mostre seu exemplo usando Filter =)
17/07/2014 13:42


0
No diretório grails-app/conf crie uma classe Groovy (ou use o new->Filter se usa uma IDE com o GGTS ou IntellijIdea)

O filtro seria +- assim:

class AutenticacaoCaseInsensitiveFilters {
def filters = {
autenticar(controller: 'controladorQueAutentica', action: 'actionQueAutentica') {
before = {
params.parametroLogin = params.parametroLogin.toUpperCase(); // ou lower
}
}
}
}


Pronto, nada mais. Deve funcionar.


0
Olá Yoshiriro,
Legal a ideia de usar Filter, mas no exemplo que você deu não está case insensitive, está upper ou lower. Assim só funcionaria se na hora de armazenar o login vc sempre garantisse que ele estaria upper ou lower, se algum login tiver sido salvo AssimPorExemplo só colocar o que foi digitado pelo usuário como upper ou lower não resolveria, estou certo?
Acho que para ficar case insensitive vc precisaria usar o "ignoreCase()" na hora de buscar o usuário para autenticar.
18/07/2014 11:16


0
Olá, Dyego.

Essa minha proposta funciona perfeitamente se, igualmente, você gravar o o login sempre em caixa alta ou caixa baixa na base ;)


0
O meu exemplo eu fiz utilizando o que a documentação do springsecurity recomenda
18/07/2014 13:30



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto