Acessar links enviados por email

4 respostas
M

Pessoal, preciso de uma ajuda!

Preciso enviar por email links de páginas que não são da página inicial do sistema e quero que qdo as pessoas acessem a página pelo link o sistema reconheça que a pessoa não está logada e a direcione para a página de login e após isso volte para o endereço da página que foi enviada com o link.

Podem me dar alguns exemplos ou dicas de como fazer isso?

Agradeço a ajuda

Marcos

4 Respostas

dev.rafael

Ñ vejo o problema. Envie o e-mail contendo o link (a maioria dos servidores de e-mail é capaz de interpretar links mesmo quando
eles vem em menssagens de texto puro). E adicione uma regra de navegação no seu web.xml. Quando um usuário ñ autenticado
tenta acessar uma url protegida, o servidor automaticamente o redireciona p/ a página de login, e quando este faz o login, é
novamente redirecionado p/ a página anteriormente solicitada.

M

Obrigado por responder dev.rafael… O problema é que não sei como adicionar essa regra…

Pode me dar um exemplo ou me ajudar a fazer isso?

Marcos

finotti

Marcos, para enviar o usuário automaticamente para a tela de login, pesquise por Servlet Filter.
Para redirecionar o usuário para a página desejada após o login, procure por “redirect after login”

dev.rafael

No seu web.xml:

Vc vai definir os security-roles. Eles são como grupos que só existem dentro da sua aplicação.

<security-role>
  <role-name>ExternalUser</role-name>
</security-role>

Então vc vai definir as restrições de acesso. Elas dizem ao seu servidor quais urls podem ser acessadas
e por quais security-roles elas podem ser acessadas.

<security-constraint>
  <display-name>EmailedUsers</display-name>
  <web-resource-collection>
    <web-resource-name>EmailCheck</web-resource-name>
    <!-- Aqui vc informa o padrão de urls a serem adicionados à essa constraint. Da mesma forma que uma servlet ou um filter. -->
    <url-pattern>/emailcheck.jsp</url-pattern>
  </web-resource-collection>
  <!-- Aqui vc informa quais roles poderão acessar as páginas dessa constraint. -->
  <auth-constraint>
    <role-name>ExternalUser</role-name>
  </auth-constraint>
</security-constraint>

Agora é só configurar o login:

<login-config>
  <!-- Diz ao servidor que ele deve usar uma página web para fazer login. -->
  <auth-method>FORM</auth-method>
  <!-- O Realm é uma espécie de "banco de dados" de usuários. Alguns já vem definidos no servidor, mas vc pode configurar/criar o seu próprio. -->
  <realm-name>myrealm</realm-name>
  <!-- Para configurar o sistema de login -->
  <form-login-config>
    <!-- Informa a página de login e a página de erro do login. Vc pode usar a mesma página se vc quizer. -->
    <form-login-page>/login.jsp</form-login-page>
    <form-login-error>/login-error.jsf</form-login-page>
  </form-login-config>
</login-config>

Sua página de login deve usar o seguinte form para autenticar o usuário:

<form action="j_security_check" method="POST">
  <label for="username">Username:</label>
  <input id="username" type="text" name="j_username" />
  <label for="password">Password:</label>
  <input id="password" type="password" name="j_password" />
  <button type="Submit">Login</button>
</form>

É importante notar:

  • o action da form “j_security_check” envia os dados p/ o servidor autenticar o usuário.
  • o nomes “j_username” e “j_password” identificam os campos “username” e “password” p/ q o servidor possa fazer a autenticação
    do usuário.

Por fim vc precisará mapear os security-roles q vc definiu no seu web.xml aos grupos definidos do banco de dados, Ldap,
ou qualquer outro sistema de armazenamento q vc estiver usando p/ armazenar os dados do seu usuário. Essa parte é um pouco
mais difícil pq o mapeamento varia de servidor p/ servidor. Aqui eu trabalho com o Glassfish e esse mapeamento é feito através
do arquivo sun-web.xml.

<security-role-mapping>
  <!-- O "security-role" definido no seu web.xml -->
  <role-name>ExternalUser</role-name>
  <!-- O grupo tal como é armazenado no seu banco, LDAP, etc... -->
  <group-name>User</group-name>
</security-role-mapping>
Criado 25 de agosto de 2010
Ultima resposta 25 de ago. de 2010
Respostas 4
Participantes 3