我是 servlet 新手。我正在创建一个小型动态网络应用程序。我想创建一个登录和注销模块,只有在正确登录后才能通过该模块访问其他 HTML 或 JSP 页面。我在一些在线资源的帮助下创建了一个简单的登录和注销 HTML 及其 servlet。但是如果我希望成功登录后只有用户可以访问其他 HTML 或 JSP 页面怎么办?并且直接点击 URL 网址可能无法访问相同的 JSP 或 HTML 页面。
在下面的项目结构中,有一些JSP和HTML页面。假设我不想让用户在没有正确登录的情况下直接打开ola.html和ola_create.jsp,那么我应该如何让它工作。请查看下面我的项目结构:
下面是 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/