Posso validar duas tabelas distintas no Spring Security?[RESOLVIDO]
7 respostas
rpsouza441
Minha aplicação está funcionando, mas como não conhecia o spring security quando comecei a implementar eu fiz uma tabela aluno e outra funcionario (não tem fk ligando uma a outra) e queria que os dois passassem pelo spring sec…
Tentei usar UNION no authentication-manager e nada. Tem alguma forma de fazer o spring sec. fazer o login de um dos dois? Se não vocês tem alguma dica de como eu posso melhor fazer isso?
Não mechi ainda com Spring security … Mas, já tentou fazer uma VIEW no banco ?
rpsouza441
nas minhas pesquisas eu esbarrei em VIEW do mysql, mas n consegui conceber a ideia, porque no meu caso é assim: eu passo um login e senha, e esse login(matricula) pode estar no funcionario ou no aluno. Tem como fazer uma view com condicional? Exemplo: if(funcionario) {} else(aluno)?
WRYEL
Da pra fazer ifs, switchs e mais um monte de coisa em query sql … Mas, acho que o que estamos fazendo é gambiarra, me explica melhor o que você precisa fazer que eu vejo se posso te ajudar. Por enquanto, o que eu entendi é:
Da pra fazer ifs, switchs e mais um monte de coisa em query sql ... Mas, acho que o que estamos fazendo é gambiarra, me explica melhor o que você precisa fazer que eu vejo se posso te ajudar. Por enquanto, o que eu entendi é:
Em primeiro lugar obrigado por estar tentando me ajuda =)
Bem vamos ver se eu consigo me explicar hehehe
pelo que eu entendi o spring security só pode fazer um select simples (tentei outras modalidades e retornou erro no sql), e por eu n ter planejado direito o programa eu tenho o seguinte problema:
Tenho a tabela do Funcionario que matricula(login) e senha, e em Aluno tem matricula(login) e senha.
e o spring busca no banco assim
users-by-username-query="SELECT matricula_funcionario as username, senha as password, 'true' as enable FROM funcionario where matricula_funcionario=? "
no caso essa string está funcionando, mas n busca o aluno(lógico :!: )
WRYEL
Se você poder setar 2 parametros, pode fazer assim:
SELECT f.matricula_funcionario as username, f.senha as password, 'true' as enable FROM funcionario AS f where f.matricula_funcionario=?
UNION
SELECT a.matricula_aluno as username, a.senha as password, 'true' as enable FROM aluno AS a WHERE a.matricula_aluno=?
SELECT username, password, 'true' as enable FROM logins WHERE username=?
edit:
VIEW é como se você quisesse disponibilizar uma Consulta SQL como uma tabela, ai você pode fazer selects em cima da view, entende ?
rpsouza441
WRYEL:
VIEW é como se você quisesse disponibilizar uma Consulta SQL como uma tabela, ai você pode fazer selects em cima da view, entende ? :)
O pouco que li sobre view entendi que uma como se fosse um funil ou algo do tipo =p. E não sabia q ela conseguia interpretar duas tabelas como uma.
E o pior que eu usei o UNION no phpmyadmin e vi como q funciona, mas no spring ele reclama que são dois parametros algo assim, mas n tinha pensado no view e union.
Vou tentar colocar aqui no programa e qualquer resultado eu volto a postar.
Obrigado pela ajuda WRYEL
Funcionou! Só consegui tempo pra testar agora hehehe muito obrigado WRYEL
odisley
Olá,
Se você usar diretamente no spring assim:
SELECT f.matricula_funcionario as username, f.senha as password, ‘true’ as enable FROM funcionario AS f where f.matricula_funcionario=?
UNION
SELECT a.matricula_aluno as username, a.senha as password, ‘true’ as enable FROM aluno AS a WHERE a.matricula_aluno=?
Você terá que colocar dois parametros e não um. Isso porque no preparedStatement cada ? corresponde a um parâmetro.
No seu caso seria mais interessante utilizar uma visão como os amigos já postaram, podendo inclusive colocar uma coluna a mais para saber se é um aluno ou funcionario.