簡體   English   中英

篩選器在無限重定向循環中運行

[英]Filter runs in infinite redirect loop

我正在制作一個學生管理系統,其中有三個用戶。
管理員,學生和超級管理員。
我正在通過過濾器處理授權。 當用戶登錄時,它將根據其角色將其重定向,例如,如果用戶是學生,則將用戶重定向到學生頁面。
但是問題在於FilterBean中的SuperAdmin

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"); 在這種情況下,它表示頁面中還有更多重定向。

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

兩者都包含admin.xhtml作為后綴,這可能會導致嘗試將superadmin.xhtml重命名為adminsuper.xhtml的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM