Leopcx
Agosto 11, 2023, 4:07am
#1
este é meu conttroler que gera o token na authenticação,mas o token só é gerado no postmam
gostaria de saber como envio ele para ser preenchido no navegador…desde já agradeço.
@PostMapping("/login")
public ResponseEntity<Token> logar(@Valid @RequestBody ClienteDTO usuario) {
Token token = clienteService.gerarToken(usuario);
if (token != null) {
return ResponseEntity.ok(token);
}
return ResponseEntity.status(403).build();
}
Leopcx
Agosto 16, 2023, 3:27am
#2
meu contoller está assim.Eu consigo enviar uma sessão mas não estou conseguindo enviar o token para o localstorage…alguém pode me ajudar?
@PostMapping (“/login”)
public ResponseEntity logar(@Valid @RequestBody ClienteDTO usuario,HttpSession session){
String token = clienteService.gerarToken(usuario);
if (token != null) {
//cria umJSESSIONID
session.setAttribute("Authorization", token);
return ResponseEntity.ok(token);
}
return ResponseEntity.status(403).build();
}
Leopcx
Agosto 16, 2023, 10:04pm
#3
Já tentei com Headrs,Models e nada…Alguém pode me ajudar!
Não dá para adicionar coisas ao localStorage pelo backend.
Vc precisa de JavaScript para fazer isso.
No seu front, vc vai ter um código JS que vai enviar uma requisição para seu back, pegar a resposta e adicioná-la ao localStorage.
Leopcx
Agosto 17, 2023, 5:47pm
#5
Entendi.Mas eu conseguiria levar uma String para um input ou uma div do html?
Eu sei como fazer isso com o angular mais para isso teria que construir Módulos e traçar rotas de endpoint, oque não queria fazer.Sabe pelo menos como posso levar para uma página html porque de lá eu consigo inserir no localstorage.VLW!!!
Não consigo te falar muito porque eu não conheço seu projeto.
Tem como vc mostrar o código do Angular que tá enviando esta requisição para /login
?
Leopcx
Agosto 17, 2023, 8:13pm
#7
então, eu não estou usando angular.Estou tentando lançar uma string na página html através de um model mas não estou conseguindo.
É, sem informação eu realmente não consigo ajudar.
O que eu sei é que seu método está retornando um ResponseEntity, mas parece que não bem o que vc quer, acho que o que vc tá querendo é que ele retorne um ModelAndView ou algo assim.
Leopcx
Agosto 18, 2023, 12:18am
#9
eu recebo um método gerar token() , se existir usuario um token é gerado , sendo que quero enviar este token para página html.
Leopcx
Agosto 18, 2023, 12:18am
#10
um model é possivel,mas não estou conseguindo…não sei oque está acontecendo!!!
Leopcx
Agosto 18, 2023, 12:26pm
#12
Esse é o método que gera o token se a autenticação for bem sussedida:
public String gerarToken( ClienteDTO usuario){
Cliente user = ClienteRepository.getByEmail(usuario.getNome(), usuario.getEmail());
if (user != null) {
Boolean valid = passwordEncoder.matches(usuario.getPassWord(), user.getPassword());
if (valid) {
logger.info("Cliente :" +" gerando token para "+ usuario.getNome());
logger.info("TOKEN : "+ TokenUtil.createToken(user).replace("Bearer ",""));
ClienteRepository.saveToken(TokenUtil.createToken(user),user.getPassword());
return new String(TokenUtil.createToken(user));
}
}
return null;
}
Leopcx
Agosto 18, 2023, 12:38pm
#13
Eu preciso capturar esse [token] e lançar no .html ou no .js pois de lá consigo acessar o localstorage!
String token = clienteService.gerarToken(usuario);
Me desculpa, eu me confundi. Agora que reli que vi que vc não está usando Angular.
Outra coisa que percebi relendo é que vc está fazendo errado neste trecho:
session.setAttribute("Authorization", token);
O “Authorization” deve ser enviado na resposta como um header e não armazenado na sessão.
Bom, ao que me parece, se trabalho no backend acabou. Agora vc tem que ir pro front e construir seu HTML.
No HTML, no JS, vc faria algo assim:
fetch('http://localhost:8080/login', {
body: {
username: 'xxx',
password: 'yyy',
},
method: 'POST',
})
.then((response) => response.text())
.then((token) => localStorage.setItem('token', token));
Claro que é só um exemplo, pois vc precisa construir seu formulário certinho e tudo.
Leopcx
Agosto 18, 2023, 5:24pm
#15
Obrigado amigo.Consegui enviar o header:
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization",token);
mais aconteceu um inesperado…
o token acho que não foi recebido para autenticação!!!
Leopcx
Agosto 18, 2023, 5:25pm
#16
quando eu envio pelo insominia eu consigo passar no filtro!!!
Deve ser configuração errada do Spring Security.