停止未经授权的servlet访问

时间:2011-12-11 21:25:49

标签: java servlets

我已经创建了一个基本的servlet来处理我的网络应用程序上的登录。

目前处于形式;

index.jsp - > loginServlet - > admin.jsp

请求通过映射/登录

发送

我遇到的问题是,如果你尝试访问/ login而不发送post / get它会产生NullPointerException。

您如何处理直接发送的请求?还是有更好的方法来解决这个问题?

堆栈追踪:

java.lang.NullPointerException
    loginServlet.doGet(loginServlet.java:39)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException
{
    HttpSession session = request.getSession(true);
    String task = request.getParameter("task");
    if(task.equals("logout")) {
        session.removeAttribute("username");
    } 
    RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp");
    dispatcher.forward(request, response);
}

2 个答案:

答案 0 :(得分:1)

  

如果您尝试访问/ login而不发送post / get

这怎么可能?

我想有一些误解或糟糕的设计正在进行中。以下是一些提示您走上正确轨道的提示:

  1. login.jsp放入/WEB-INF文件夹。

  2. 重写doGet()以便转发到该JSP。

  3. 将登录处理作业保留在doPost()中。确保它永远不会抛出RuntimeException。这些异常基本上是开发人员的错误。始终检查null上的用户输入,绝不相信用户输入。

  4. 这样,当您通过GET请求调用该servlet时,将打开登录页面(例如,直接在地址栏中输入其URL,跟随书签等,并且当您提交{{1时)将完成登录处理作业在JSP内部。

    作为奖励,您可以获得更好的网址。

    另见:

答案 1 :(得分:0)

有可能是你的NullPointer异常:

String task = request.getParameter("task");
if(task.equals("logout")) {
    session.removeAttribute("username");
} 

因为您没有先检查确保您甚至检索到任务参数。需要检查该值是否为空。