Restringindo usuários de acessar páginas alterando diretamente o URL no JSF

Eu tenho dois tipos de usuários no meu aplicativo – clientes e vendedores. Estou usando um PhaseListener no JSF para impedir que os usuários acessem páginas sem fazer o login, mas depois que eles estão logados eu não sei como impedir que o usuário altere o URL na barra de localização e acessar páginas que ele não é permitido também. Por exemplo, impedindo clientes de acessar páginas de vendedores.

Alguém tem uma ideia de como eu poderia impedir esses accesss ilegais?

Atribua ao usuário um grupo / function e verifique isso também dentro de seu ouvinte de fase (o que poderia tecnicamente ser melhor um filtro de servlet simples, afinal, um ouvinte de fase está embaixo das capas, bastante desajeitado para o propósito simples e não é executado em URLs não-JSF).

Por exemplo, permitir que os URLs que começam com /seller/ sejam acessados ​​apenas por usuários que tenham uma function de SELLER :

 if (url.startsWith("/seller/") && user.getRoles().contains(Role.SELLER)) { // Allow access. } else { // Block access. } 

Observe que essa funcionalidade é fornecida / incorporada em muitas estruturas de autenticação, como a autenticação gerenciada por contêiner interna Java EE e a biblioteca de terceiros Apache Shiro. Tudo o que você precisa é, então, uma simples input de configuração web.xml ou algum arquivo de configuração, como um arquivo INI em Shiro.

Veja também:

  • URLs protegidos que vazam componentes desprotegidos do webapge para usuários não autenticados
  • JSF: Como controlar o access e os direitos no JSF?
  • JSF2 + Apache Shiro tutorial

Use o Filter para isso. Crie uma class que implemente a interface javax.servlet.Filter e, no método doFilter() , verifique a function do usuário e, se o usuário não tiver a function, redirecione-o para alguma página personalizada. No web.xml adicione definição e mapeamento para este filtro:

  MyFilter mypackage.MyFilter   MyFilter *.xhtml  

Você pode usar um arquivo ou algo em que mapeie cada página com uma regra de usuário (algumas páginas podem ser acessadas por mais de um exemplo de userrole:

 client,seller client seller 

E você define algum tipo de class LoginController onde você verifica currentuserrole e solicitou a página (url) contra essa lista. E se não for concedido, em seguida, redirect para página de erro personalizado ou página de login ou o que quer.

Você adiciona essa class logincontroller a um phaselistener ao seu facesconfig.

Você precisa validar os parâmetros que causaram erro em sua página ao visitar diretamente. Você pode fazê-lo em um evento prerenderview em jsf2 ou em um método post construct em jsf1.2

Intereting Posts