java - 如何使用 servlet 为 Eclipse 中的所有 html 和 jsp 页面维护唯一的 session ?

标签 java html jsp session servlets

我是 servlet 新手。我正在创建一个小型动态网络应用程序。我想创建一个登录和注销模块,只有在正确登录后才能通过该模块访问其他 HTML 或 JSP 页面。我在一些在线资源的帮助下创建了一个简单的登录和注销 HTML 及其 servlet。但是如果我希望成功登录后只有用户可以访问其他 HTML 或 JSP 页面怎么办?并且直接点击 URL 网址可能无法访问相同的 JSP 或 HTML 页面。

在下面的项目结构中,有一些JSP和HTML页面。假设我不想让用户在没有正确登录的情况下直接打开ola.html和ola_create.jsp,那么我应该如何让它工作。请查看下面我的项目结构:

enter image description here

下面是 servlet 的代码:

LoginServlet.java

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

import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  
public class LoginServlet extends HttpServlet {  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)  
                    throws ServletException, IOException {  
        response.setContentType("text/html");  
        PrintWriter out=response.getWriter();  
        request.getRequestDispatcher("link.html").include(request, response);  

        String name=request.getParameter("name");  
        String password=request.getParameter("password");  

        if(password.equals("admin123")){  
        //response.sendRedirect("ola.html");
       // out.print("Welcome, "+name);  
        HttpSession session=request.getSession();  
        session.setAttribute("name",name);  
        }  
        else{  
            out.print("Sorry, username or password error!");  
            request.getRequestDispatcher("login.html").include(request, response);  
        }  
        out.close();  
    }  
}  

LogoutServlet.java

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

import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import javax.servlet.http.HttpSession;  
public class LogoutServlet extends HttpServlet {  
        protected void doGet(HttpServletRequest request, HttpServletResponse response)  
                                throws ServletException, IOException {  
            response.setContentType("text/html");  
            PrintWriter out=response.getWriter();  

            request.getRequestDispatcher("link.html").include(request, response);  

            HttpSession session=request.getSession();  
            session.invalidate();  

            out.print("You are successfully logged out!");  

            out.close();  
    }  
} 

最佳答案

您可以使用Servlet过滤器,在本例中,它主要用于执行过滤任务,例如转换、日志记录、压缩、加解密、输入验证等。

所以基本上它就像一个验证层,然后您才能访问您的资源,这些资源可以是 servlet、JSP 或 HTML 页面。例如,如果您使用 url 映射/hello 创建一个过滤器,那么对于每个对/hello 的请求,将执行第一个过滤器。您可以在此过滤器中验证用户是否已登录,如果验证失败,则不允许用户访问/hello 请求。

您可以在 web.xml 文件中定义类似的内容。

<filter>  
<filter-name>f1</filter-name>  
<filter-class>MyFilter</filter-class>  
</filter>  

<filter-mapping>  
<filter-name>f1</filter-name>  
<url-pattern>/ola</url-pattern>  
</filter-mapping> 

这就是您定义过滤器的方式

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

    import javax.servlet.*;  

    public class MyFilter implements Filter{  

    public void init(FilterConfig arg0) throws ServletException {}  

    public void doFilter(ServletRequest req, ServletResponse resp,  
        FilterChain chain) throws IOException, ServletException {  

        PrintWriter out=resp.getWriter();  
        out.print("filter is invoked before");  

     String user=request.getParameter("username");
      if(user=="admin"){

        chain.doFilter(req, resp);//sends request to next resource  

       }     
else  {
 out.print("You are not authorized to view this page");  
}

        }  
        public void destroy() {}  
    }  

附录-

关于java - 如何使用 servlet 为 Eclipse 中的所有 html 和 jsp 页面维护唯一的 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51925811/

相关文章:

java - 访问 Spring/Maven 应用程序中的资源文件夹

java - 将文件路径字符串从 jsp 传递到 java servlet

java - Tomcat 和域指向

javascript - 使用javascript在html上绘制矩形

java - 我重复收到 "Authentication did not succeed for user ID"20 次

javascript - 传递变量 PHP、Javascript location.reload 和 HTML 输入

jquery - 图像之间需要一致的水平间距

javascript - 如何在此处启用关闭窗口按钮?

java - 使用 action 属性时,文件扩展名更改为 ".jsf"

java - 位移 >32 位长