注销旧会话,然后在 Java Web 应用程序中使用相同的用户标识和密码在新会话中继续



>假设某人使用用户ID和密码登录应用程序。现在使用相同的用户 ID 和密码,他正在尝试登录而不从第一个会话注销。我想让它从第一个会话注销并自动继续新会话。

Struts2,JSP,Java是技术,我正在用于我的应用程序。

面临的问题

  1. 如果我们在新选项卡或窗口中打开,IE 8 在同一台机器中给出相同的会话 ID。无法区分来自同一台计算机的不同登录。如何设置自己的会话 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) ;
    }

基本上,您的要求会导致 Web 安全漏洞。如果某人已登录,则其会话必须处于活动状态。现在场景是这样的:

如果您尝试使用相同的凭据再次登录,他将自动登录。如果你想在每次登录时都杀死旧会话,那么你需要做的是,每次登录时都需要获取一个新会话,所以你的旧会话将过期。只需编写筛选器即可实现此目的。在此过滤器中,检查用户是否已与会话关联,如果是,则使其当前会话无效并启动新会话。这将解决多次登录尝试的问题。

请记住,当会话启动时,服务器会向用户发送一个cookie。此后,对于每个后续请求,此cookie将被传输到服务器。即使您在浏览器中打开多个选项卡,也只会将相同的cookie发送回服务器。

希望我明白这一点。

最新更新