Escrevendo um filtro de autorização para meu aplicativo da web (JSF 2.0)

Seguindo alguns conselhos, decidi escrever meu próprio filtro de autorização para meu aplicativo da Web (não estou usando segurança gerenciada por contêiner, portanto, preciso fazer isso dessa maneira).

Este é o meu primeiro filtro, então estou um pouco confuso em como devo implementá-lo. Isto é o que eu fiz até agora:

package filters; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import entities.Role; public class RestrictPageFilter implements Filter { FilterConfig fc; public void init(FilterConfig filterConfig) throws ServletException { // The easiest way to initialize the filter fc = filterConfig; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; HttpSession session = req.getSession(true); String pageRequested = req.getRequestURL().toString(); Role currentUser = (Role) session.getAttribute("userRole"); //Pages that are allowed with no need to login: //-faq.xhtml //-index.jsp //-login.xhtml //-main.xhtml //-registration.xhtml //NOW pages that are restricted depending on the type of user //buyoffer.xhtml(Only BUYER) //sellerpanel.xhtml(Only SELLER) //adminpanel.xhtml(Only ADMINISTRATOR) //HOW SHOULD I IMPLEMENT THAT?? if(currentUser != null && currentUser.getType().equals("BUYER")) { } if(currentUser != null && currentUser.getType().equals("SELLER")) { } if(currentUser != null && currentUser.getType().equals("ADMINISTRATOR")) { } } public void destroy() { // Not needed } } 

Como você vê eu deixei comentários lá onde eu fiquei preso. Alguém pode me dar uma mão terminar este filtro ou me dar algumas dicas de pseudo-código como devo terminá-lo?

Eu vi alguns exemplos em toda a web, mas nenhum deles faz filtragem diferente dependendo do tipo de usuário.

Eu aprecio sua ajuda 🙂

Atualizar

Eu criei um arquivo xml para me ajudar a fazer a filtragem (ele está localizado dentro do WEB-INF / classs)

   buyoffer.xhtml faq.xhtml index.jsp login.xhtml main.xhtml registrationSucceded.xhtml   sellerpanel.xhtml faq.xhtml index.jsp login.xhtml main.xhtml registrationSucceded.xhtml   sellerpanel.xhtml faq.xhtml index.jsp login.xhtml main.xhtml registrationSucceded.xhtml    

Eu li o arquivo do método init ().

 public class RestrictPageFilter implements Filter { private FilterConfig fc; private InputStream in; public void init(FilterConfig filterConfig) throws ServletException { // The easiest way to initialize the filter fc = filterConfig; //Get the file that contains the allowed pages in = this.getClass().getResourceAsStream("/allowedpages.xml"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; HttpSession session = req.getSession(true); String pageRequested = req.getRequestURL().toString(); //Get the value of the current logged user Role currentUser = (Role) session.getAttribute("userRole"); if (currentUser != null) { } } public void destroy() { // Not needed } } 

Se você precisar permitir o access, basta ligar para o

 // it will process request normally, means it will leave the control from Filter chain.doFilter(request, response); 

Se você quiser restringir o usuário, chame

 //take some action response.sendRedirect("URL to some page");//it will simply make user redirected 

Alguma sugestão

  • Faça com que seja configurável usando algum tipo de XML de arquivo de propriedades, seu código parece difícil para mim, amanhã pode haver outra página adicionada, então você precisa re-compilar seu Filtro.

  • Se permitido, então simplesmente use o Spring Security, ele tem resources legais. Além disso, você não estará reinventando a roda

Intereting Posts