2

ユーザーがアプリでユーザー ID とパスワードを使用してログインしているとします。現在、同じユーザー ID とパスワードを使用して、最初のセッションからログアウトせずにログインしようとしています。最初のセッションからログアウトし、新しいセッションを自動的に続行するようにしたいと思います。

Struts2、JSP、Java はテクノロジーであり、アプリに使用しています。

直面している問題

  1. 新しいタブまたはウィンドウで開くと、同じマシンで同じセッションIDを与えるIE 8。同じマシンからの異なるログインを区別できません。独自のセッション ID を設定するには?
  2. SBI のサイトのようなバンキング アプリケーションはすべてそのようにしか機能しませんが、リアルタイムでどのように機能しますか?
  3. SBI 銀行のサイトがオンライン トランザクションで動作するのと同じことを再現したいと考えています。新しいウィンドウで再度開くと、最初のウィンドウでメッセージセッションを送信します

このロギング部分の詳細を教えてください。ありがとう。

これが私のフィルターです

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    System.out.println("FirstFilter : In filter doFilter before doFilter...");
    HttpServletRequest req = (HttpServletRequest) request ;
    HttpServletResponse res = (HttpServletResponse) response ;

    HttpSession session = req.getSession(false);

    String userId=req.getParameter("username");
    String password=req.getParameter("password");
    System.out.println(" : : " + req.getParameter("username")) ;
    System.out.println(" : " + req.getServletPath());


    LoggedInUserVO userProfVOSession = null ;
    if(session != null) {
    String  sessionId=session.getId();
        userProfVOSession = (LoggedInUserVO)session.getAttribute("LoggedInUser") ;
        //check for login id password and session for single user sign in
        if(null!=userProfVOSession){
        if(userProfVOSession.getUserName().equalsIgnoreCase(userId) && userProfVOSession.getUserPassword().equals(password) && userProfVOSession.getSessionId().equals(sessionId)){
            //do nothing
        }
        else{
            System.out.println("in duplicate");
        }
        }
    }       

    if(userProfVOSession == null) {
        if("/populatelogin.action".equals(req.getServletPath()) || "/login.action".equals(req.getServletPath())||"/images/Twalk-Logo-4-green.png".equals (req.getServletPath())||"css/twalk.css".equals( req.getServletPath() )) {
            chain.doFilter(req, res) ;
        } else {
            req.getRequestDispatcher("Entryindex.jsp").forward(req, res) ;
        }
    } else {
        chain.doFilter(req, res) ;
    }
4

1 に答える 1

1

基本的に、要件はWebセキュリティの脆弱性につながります。ユーザーがすでにログインしている場合は、そのユーザーのセッションがアクティブである必要があります。シナリオは次のようになります。

同じ資格情報で再度ログインしようとすると、自動的にログインします。ログインするたびに古いセッションを強制終了する場合は、ログインするたびに新しいセッションを取得する必要があります。 、したがって、古いセッションは期限切れになります。これは、フィルターを作成するだけで実現できます。このフィルターで、ユーザーが既にセッションに関連付けられているかどうかを確認し、関連付けられている場合は、現在のセッションを無効にして新しいセッションを開始します。複数のログイン試行の問題を解決します。

セッションが開始されると、サーバーはユーザーにCookieを送り返すことに注意してください。以降、要求が行われるたびに、このCookieがサーバーに送信されます。それでも、ブラウザで複数のタブを開いた場合、この同じCookieのみがサーバーに返送されます。

私がこれを理解したことを願っています。

于 2012-04-13T05:30:55.617 に答える