2017-07-03 10 views
1

私はJavaフィルタの概念を使用して保護する必要があるmvc Webアプリケーションを持っています。 私がログインしていない場合、アプリケーションは私をログインページに連れて行き、私がログインしている場合、アプリケーションはログインページにアクセスできないようにする必要があります。以下はユーザがログインしているかどうかを確認するための適切なフィルタ実装

は以下 ホームページのURLは/家庭(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にimplementdているフィルタコードは、/ログイン(login.jspを)です要件を満たしているかどうかを確認するコードを更新しました。 login 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 { 
} 

} 
関連する問題