2015-08-03 4 views
0

Я создаю систему управления студентами, в которой у меня есть три пользователя.
Администратор, студенты и супер админы.
Я обрабатываю авторизацию через фильтр. Когда пользователи регистрируются, он перенаправляет его в соответствии с его ролью, например, если пользователь переадресовывает пользователя на страницу студента.
Но проблема с SuperAdmin в FilterBean
Фильтр работает в бесконечном цикле перенаправления

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; 

/** 
* 
* @author Sikandar 
*/ 
public class FilterBean implements Filter{ 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 

    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest req = (HttpServletRequest) request; 
     HttpServletResponse resp = (HttpServletResponse) response; 
     //HttpSession session = req.getSession(); 
     HttpSession session = req.getSession(); 
     String userName = (String) session.getAttribute("userName"); 
     String role = (String) session.getAttribute("role"); 
     System.out.println("role in Filter out side condition " +role); 
     String url = req.getRequestURI(); 
     if (session == null || userName == null) { 
      System.out.println("The role is if session == null "+role); 
      if (url.indexOf("admin.xhtml") >= 0 || url.indexOf("student.xhtml") >= 0 || url.indexOf("superadmin.xhtml") >= 0) { 
       resp.sendRedirect(req.getServletContext().getContextPath()+"/login.xhtml"); 
      } else { 
       chain.doFilter(request, response); 
      } 
     } else { 

      if(role.equals("admin") && (url.indexOf("login.xhtml") >= 0 || url.indexOf("superadmin.xhtml") >= 0 || url.indexOf("student.xhtml") >= 0)) { 
       resp.sendRedirect(req.getServletContext().getContextPath()+"/admin.xhtml"); 
      } else if (role.equals("super") && (url.indexOf("login.xhtml") >= 0 || url.indexOf("student.xhtml") >=0)) { 
       System.out.println("role == super "+url.indexOf("admin.xhtml")); 
       resp.sendRedirect(req.getServletContext().getContextPath()+"/superadmin.xhtml"); 
      } else if (role.equals("student") && (url.indexOf("login.xhtml") >= 0 || url.indexOf("admin.xhtml") >=0 || url.indexOf("superadmin.xhtml") >= 0)) { 
       resp.sendRedirect(req.getServletContext().getContextPath()+"/student.xhtml"); 
      } 
      else { 
       chain.doFilter(request, response); 
      } 
      } 
    } 

    @Override 
    public void destroy() { 

    } 

} 

else if (role.equals("super") && (url.indexOf("login.xhtml") >= 0 || url.indexOf("student.xhtml") >=0)) { 
       System.out.println("role == super "+url.indexOf("admin.xhtml")); 
       resp.sendRedirect(req.getServletContext().getContextPath()+"/superadmin.xhtml"); 

если я поставил url.indexOf("superadmin.xhtml"); в таком состоянии, он говорит, что есть более Перенаправление на страницу.

+0

почему вы должны проверить на всех страницах и всегда перенаправлять на одну страницу? Ваш код, если он работает, перенаправляет супер администратора всегда на страницу супер администратора независимо от того, что он попросил student.xhtml или login.xhtml –

+0

Правильный способ - это обработать роль на странице входа и когда пользователь вводит имя пользователя/пароль для перенаправления на правильный результат. После этого создайте фильтр, который проверяет только, зарегистрирован ли пользователь и перенаправляет его на страницу входа, если он не является. –

ответ

0

url.indexOf("superadmin.xhtml"); и url.indexOf("admin.xhtml");

Оба содержит admin.xhtml в качестве суффикса это может проблема попытаться переименовать superadmin.xhtml в adminsuper.xhtml

Смежные вопросы