2017-07-03 68 views
1

我有一個mvc web應用程序,需要使用java過濾器概念來保護。 如果我沒有登錄應用程序應該帶我到登錄頁面,如果我登錄應用程序不能讓我訪問登錄頁面。適當的過濾器實現來檢查用戶是否登錄

下面是我在過濾器 登錄網址已被implementd /登錄(login.jsp的) 主頁的網址是/ home(針對home.jsp)

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

@WebFilter("/LoginFilter") 
public class LoginFilter implements Filter { 

private RequestDispatcher dispatcher; 

public LoginFilter() { 
} 

public void destroy() { 
} 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

    HttpServletRequest req=(HttpServletRequest) request; 
    HttpServletResponse res=(HttpServletResponse) response; 
    HttpSession session=req.getSession(false); 
    String reqUri=req.getRequestURI(); 
    System.out.println("RequestURI:"+reqUri); 

    if(session!=null && session.getAttribute("user")!=null){ 

     if(reqUri.equals("login")){ 
      System.out.println("you are already logged in"); 
      dispatcher=request.getRequestDispatcher("/home"); 
      dispatcher.forward(req, res); 
      return; 
     } 
     else{ 
      chain.doFilter(request, response); 
     } 
    } 

} 

public void init(FilterConfig fConfig) throws ServletException { 
} 

} 
+0

那麼,究竟是什麼問題呢? –

+0

'reqUri.equals(「login」)''而reqUri = req.getRequestURI();'...請嘗試關注您的代碼以瞭解它的功能。 – KarelG

回答

0

您可以使用下面的過濾代碼更新代碼以檢查它是否完成您的要求。 登錄URL是預定義的,並且每次登錄用戶都要檢查他/她是否進入安全頁面。

import java.io.IOException; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

@WebFilter("/LoginFilter") 
public class LoginFilter implements Filter { 

private String loginUri="/LoginLogout/login"; 
private RequestDispatcher dispatcher; 

public LoginFilter() { 
} 

public void destroy() { 
} 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

    HttpServletRequest req=(HttpServletRequest) request; 
    HttpServletResponse res=(HttpServletResponse) response; 
    HttpSession session=req.getSession(false); 
    String reqUri=req.getRequestURI(); 
    System.out.println("RequestURI:"+reqUri); 

    //already looged in 
    if(session!=null && session.getAttribute("user")!=null){ 

     //trying to access login url after logged in 
     if(reqUri.equals(loginUri)){ 
      System.out.println("you are already logged in"); 
      dispatcher=request.getRequestDispatcher("/home"); 
      dispatcher.forward(req, res); 
      return; 
     } 
     else{ 
      chain.doFilter(request, response); 
     } 
    } 
    //if not logged-in 
    else{ 
     System.out.println("First have to logged in"); 
     dispatcher=request.getRequestDispatcher("/login"); 
     dispatcher.forward(req, res); 
     return; 
    } 

} 

public void init(FilterConfig fConfig) throws ServletException { 
} 

}