Pergunta

Estou procurando um método ou API atual que permita adicionar tokens às solicitações de aplicativos da web. Talvez dentro da sessão, mas não persistisse. Ou se você pudesse me ajudar, descrevendo um método eficiente para fazer isso

Por exemplo

1. Get request => servlet gera um token e o imprime na visualização

2. Retorna uma vista com um token escondido

<input type="hidden" name="token" value="UA37jdjs9UDJS3">
<input type="submit" name="deleteEmail" value="Delete">

3. POST SOITE => O formulário é enviado e verifica se o token é o mesmo.

Poucas coisas a serem observadas, se houver solicitações do AJAX, alguns outros tokens teriam que estar vivos para várias solicitações.

Se o usuário decidir fechar o navegador, o token teria que morrer quando a sessão estiver cronometrada.

Se o usuário não concluir o formulário, sair para fazer outra coisa no site, esses tokens precisariam ser excluídos à medida que não são utilizados.

Mas qual é a melhor maneira de implementar um sistema como este,

A Spring Security 3 tem um sistema que eu posso usar?

Dentro do Java, Grails, Spring MVC, Spring Security 3 e Hibernate Area

Foi útil?

Solução

Você deu uma olhada no "Pattern Token Syncronizer" na documentação do Grails em http://grails.org/doc/1.2.0/guide/single.html ?

Outras dicas

Dê uma olhada no projeto HDIV em http://www.hdiv.org/. Eles fazem exatamente isso. Mesmo se você não usar o código do projeto HDIV, as informações podem fornecer uma opção de como fazê -lo. Foi uma boa cartilha para eu aprender sobre o manuseio de tokens para coisas como CSRF e outros usos, como controles duplos de enviar.

O primeiro pensamento era que você poderia usar o ID da sessão já gerado. Mas se você está tentando formar o estado, sugiro usar algo como Modelo de conversa de costuras

Por que não usa apenas a session_id que o contêiner da web gera para você quando você liga request.getSession ()?

Se você deseja criar seu próprio "token", pode querer verificar os cookies. Um cookie é um par de valores-chave enviado como cabeçalho HTTP por um servidor da Web para um navegador da Web e, em seguida, enviado de volta inalterado pelo navegador sempre que acessa esse servidor.

Para criar um cookie em um servlet que você pode usar:

public void doGet ( HttpServletRequest request, HttpServletResponse response )
     throws ServletException, IOException {
  // Create a cookie
  Cookie c1 = new Cookie("yourdomain.token","the value");
  response.addCookie(c1);
 //build your response

}

O cookie será incluído automaticamente na próxima solicitação HTTP. Você pode ler de volta com:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
//build your response
}

Recentemente, encontrei um caso de uso para isso.

Se uma janela antiga do aplicativo estivesse presente no navegador e um link de login foi clicado a partir de outra janela do navegador, a ação de login criou primeiro uma nova sessão e depois foi redirecionada para a janela do aplicativo. Isso acionou o método OnUnload da janela antiga, que resultou em uma solicitação de logout para o servidor registrando o novo usuário.

Confiar em um evento JavaScript OnUnload para o log -out parece um pouco ruim para mim, mas isso não pôde ser alterado, por isso escolhemos fazer o que o OP sugeriu e adicionou um token em cada visão renderizada, verificando -a para cada solicitação. Isso impede a solicitação de logout do Onunload de encerrar a nova sessão.

Quanto à melhor maneira, eu diria que isso é bem direto. Você pode, por exemplo, usar http://java.sun.com/j2se/1.5.0/docs/api/java/util/uuid.html Para gerar teclas exclusivas. Se você estiver usando uma estrutura baseada em componentes como tapeçaria, JSF ou wicket, pode haver uma maneira mais de alto nível de lidar com isso.

Isso é semelhante à sua USECASE? Ou você está tentando alcançar algo completamente diferente?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top