Problema com o encaminhamento JSF e a restrição de segurança
Pergunta
Estou fazendo um aplicativo da web no qual determinadas páginas são protegidas por login. Eu criei um campo de segurança JDBC em Glassfish para isso e usei a autenticação de formulário (semelhante ao método descrito aqui)
Estou usando regras de navegação para redirecionar o usuário para as áreas seguras do site:
<navigation-case>
<from-outcome>showResults</from-outcome>
<to-view-id>/SecureUser/Reservation/New/AvailableResults.xhtml</to-view-id>
<redirect/>
</navigation-case>
(etc...)
Isso funciona bem. Mas se eu pular a tag de redirecionamento no caso de navegação, o URL da página não mudará. E, nesse caso, um usuário não autenticado pode acessar a página segura.
Qual é a melhor maneira de fazer isso? Garantir que a página seja redirecionada em vez de encaminhada seja boa o suficiente? Devo escrever código em todas as páginas seguras que verifique se o usuário está conectado ou não?
Solução
Usar a postagem para navegação página a página é considerada uma prática ruim. Não use JSF h:commandLink
ou h:commandButton
Para navegação simples de página a página. Ambos geram um formulário de postagem que é totalmente desnecessário e sero-amigável para a navegação simples. Em vez de usar h:link
ou h:button
em vez de. Ele renderiza um link de baunilha simples e obtenha o formulário, respectivamente.
Se você estiver enviando um formulário de postagem de qualquer maneira e a página de resultado é diferente da página do formulário, usando Padrão PRG (pós-redirect-get) é considerado uma boa prática. Você pode usar <redirect/>
por esta.