2009-07-25 4 views
3

Iveはカスタムログインシステムでアプリケーションを作成しました。そして、アクセス可能な領域を設定するための独自のセキュリティフィルタを作成しました。しかし、私はいつもログインページにリダイレクトされ、次にインデックスページにはログインしたホームページがリダイレクトされます。私は、セッションIDが、私が制限されているものを使用しようとするときにログインする時と異なることを発見しました。My Java eeアプリケーションでセッションIDが異なる

public class securtityFilter implements Filter { 

public void init(FilterConfig filterConfig) throws ServletException { 
    //To change body of implemented methods use File | Settings | File Templates. 
} 

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
    HttpServletRequest req = (HttpServletRequest) servletRequest; 
      // if there is no userBean, then they have not gone through 
      // the login, so kick them to the login page 
      if(null==req.getSession().getAttribute("username")) 
      { 
       ((HttpServletResponse)servletResponse).sendRedirect("../Login.jsp"); 
       System.out.println("Redirected - No session"); 

      } 
        // otherwise, let them go to the page/resource they want 
        filterChain.doFilter(servletRequest, servletResponse); 
       System.out.println("Gone through Filter"); 

       // System.out.println("In Filter Servlet: "+ req.getSession().getId()); 

      } 

public void destroy() { 
    //To change body of implemented methods use File | Settings | File Templates.     
} 

}

はここに私のweb.xmlファイルである:ここに私のコードです

<filter> 
    <filter-name>SecurityFilter</filter-name> 
    <filter-class>filters.securtityFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SecurityFilter</filter-name> 
    <url-pattern>/add/*</url-pattern> 
</filter-mapping> 

だから、誰もがこの問題で私を助けることができる場合は、それらしてください。もうコードが必要な場合は、私に知らせてください。事前 で おかげディーン

+0

ログインページでユーザー名属性が設定されていますか? –

+0

ログインサーブレットでYes: while(rs.next()) { HttpSession session = request.getSession(true); 文字列tmp = rs.getString(1); System.out.println(tmp); session.setAttribute( "username"、tmp); /* role = rs.getInt( "level"); session.setAttribute( "role"、role); */ count ++;その後、 } – Dean

答えて

0

ログインサーブレットでは、あなたが

while (rs.next()) 
{ 
    HttpSession session = request.getSession(true); 
    String tmp = rs.getString(1); 
    System.out.println(tmp); 
    session.setAttribute("username", tmp); 
    count++; 
} 

を持っているあなたは、あなたのセッションには、ユーザー名の属性を持っていない場合は、このコードブロックが実行されていないので、だから、それはあります。私はあなたがデータベースクエリの結果をループしていると仮定しますので、実行している実際のクエリが結果を返すかどうかを確認してください。

0

は、それはあなたのフィルターの内側に新しいセッションを作成したことがないように

HttpSession ses = req.getSession(false); // null if no current 
if(null == ses || 
    null == ses.getAttribute("username")) 

if(null==req.getSession().getAttribute("username")) 

を変更してみてください。ログインページでセッションを作成させます。

+0

これこれは今ポップアップするとエラーになり、nullポインタ例外をスローし – Dean

+0

: 25 - 7月 - 2009年午後09時46分30秒org.apache.jasper.runtime.JspFactoryImpl internalGetPageContext SEVERE:例外は、ページコンテキスト のjavaを初期化します.lang.IllegalStateException:応答がコミットされた後にセッションを作成できません。 – Dean

+0

リダイレクトの直後にreturn文を追加してください。そして、あなたのフィルターチェーンのHttpResponseで何もしていないことを確認してください。 –