Boa noite,
Surgiu em uma aplicação um problema referente a segurança onde mesmo colocando as regra de segurança, um usuário sem as devidas permissões tem acesso.
Depois de uma pesquisa na internet vi que é por causa do problema da one-url-behind, pois o JSF por default utiliza forward e não redirect para acessar páginas.
Gostaria de saber qual a melhor forma para bloquear acesso indevido as páginas sem a necessidade de utilizar ?faces-redirect=true em todos os redirecinamentos.
Por exemplo, em EJBs é possível fazer a segurança utilizando as anotações @RolesAllowed, @AllowAll, @DenyAll, etc…nos managed beans (estou utilizando CDI - @Named), não teria algo semelhante, ou ao menos uma maneira de alterar o comportamento default do JSF 2.0 de forward para redirect (preferia utilizar alguma outra abordagem, por questões de desempenho.)
A JSR do JSF 2.0 não especifica nada do tipo? Olhei varios artigos e livros, e a melhor maneira sempre foi essa, porém devido o problema do forward a mesma não funciona.
Um pedaço do meu web.xml, onde declaro as regras de segurança:
<security-constraint>
<web-resource-collection>
<web-resource-name>Permissão de Login</web-resource-name>
<url-pattern>/faces/home/index.xhtml</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>LOGIN</role-name>
</auth-constraint>
</security-constraint>
E um metodo de acesso a página que se encontra no managed bean:
public String pageProduto() {
produto = new Produto();
return "/cadastro/produto/Produto";
}
Att,
Vinicius.