使用Servlet自动登录和注销

时间:2018-11-28 11:02:45

标签: java servlets cookies login servlet-3.0

我想要Java Servlet中的登录应用程序。 如果用户以前登录过站点,我想在其中自动登录的系统自动重定向到欢迎页面,而不是登录页面。一切正常,但是当我单击注销按钮并将cookie设置为“”时,它仍然不会删除cookie,并且注销后仍然每次将我转发到个人资料页面而不是登录页面。 我在这里添加2个servlet,其中一个包含有关重定向机制的信息,另一个是注销servlet。 谁能帮我解决我的问题?

HomeServlet.java

package com.demo.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



public class HomeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public HomeServlet() {
        super();

    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doProcess(request, response);
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doProcess(request, response);}


    public void doProcess(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
        res.setContentType("text/html");
        PrintWriter out=res.getWriter();  
        System.out.println(req.getCookies());
        Cookie ck[]=req.getCookies();  
        if(ck!=null){  
         String name=ck[0].getValue();  
        if(!name.equals("")||name!=null){  
            res.sendRedirect("ProfileServlet");

        }  
        }else{  
           res.sendRedirect("login");

        }  
    }

}

LogoutServlet.java

package com.demo.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class LogoutServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public LogoutServlet() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doProcess(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doProcess(request, response);
    }
    protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        Cookie ck=new Cookie("name","");  
        ck.setMaxAge(0);  
        response.addCookie(ck);  

         request.getRequestDispatcher("/login").include(request, response);
         out.println("<script type=\"text/javascript\">");  
         out.println("alert('Logged Out');");  
         out.println("</script>");

         System.out.println("Logout "+ck.getValue() );


    }
}

1 个答案:

答案 0 :(得分:0)

您的if条件可能存在问题...尝试调试。

if(!name.equals("")||name!=null){  
            res.sendRedirect("ProfileServlet");

        }  

您可以编写它,例如:

if(name!=null && !name.trim().isEmpty()){  
                res.sendRedirect("ProfileServlet");

 }