在 JSP 中实现登录页面的优雅方式

Posted

技术标签:

【中文标题】在 JSP 中实现登录页面的优雅方式【英文标题】:Elegant way to implement Login page in JSP 【发布时间】:2012-03-09 06:35:29 【问题描述】:

我是 JSP Web 开发的初学者。我的 webapp 有一个登录 (Login.jsp) 页面,该页面具有标准登录控件(例如,用户名、密码文本框、记住我复选框和登录按钮)我想要获得的是当用户提供凭据时,提交后详细信息,调用 Authenticate.jsp,其中凭据与数据库匹配,如果它们正确,则为该用户创建会话,如果凭据不正确。我使用response.sendRedirect("./Login.jsp?status=fail");将用户重定向回登录页面

在 Login.jsp 上,始终检查 status 参数,当它给出值 fail 时,我在带有消息 User Name or Password Incorrect! 的文本框下方有 <div>,在此类失败时向用户显示。通过 URL 发送此类参数是否安全(出于特定目的)?什么是更合适或标准的方式来实现这样的事情?另外,当用户第一次访问登录页面时,寻找status参数会抛出NullPointerException。我有完整的 Login.jsp 代码来检查下面的参数。

    try
    
        String stat = request.getParameter("Status");
        if(stat.equalsIgnoreCase("fail"))
            msg = "Invalid Username or Password!";
        else
            msg = " ";
    
    catch(NullPointerException e)
    
        msg = " ";
    
    catch(Exception e)
    
        out.println(e);
    

正如我提到的,msg 字符串对象被写入<div>。因此,如果没有找到status 参数,则假定用户是第一次访问该页面,因此不会显示错误凭据的消息。

我觉得这可能不是在实际系统中实现的方式。

纠正我。

谢谢。

注意:在网络上搜索相同的查询时,他们中的大多数都有不同的 JSP 页面来表示登录失败,而我只想保留一个页面。

【问题讨论】:

【参考方案1】:

在进行专业开发时,您最好使用安全框架。 Apache Shiro 和 Spring Security 都非常适合在您的项目中实施安全性。

【讨论】:

我浏览了 Apache Shiro 的概述,我一定会尝试一下。但我正在寻找一种无需任何第三方框架即可使用的解决方案,仅使用 Java EE API 即可完成。 如果你不使用框架,你最终会为现实世界的应用程序做很多工作【参考方案2】:

在您的代码中String stat = request.getParameter("Status");

stat 将永远是 NULL 访问 Login.jsp 时。这不是正确的实现方式。

始终建议在您拥有JSP 的地方实现MVC 模式以进行演示和查看。 Servlets 重定向请求,Beans 作为模型。

这里有更多解释...

1) 关注点分离 (SoC)。让您的视图 (jsp) 处理呈现,控制器 (servlet) 处理应用程序的流程,以及您在另一组类中的所有处理。这将是 MVC 的基础。这是一个简单布局的***定义。

Model - The model is a collection of Java classes that form a software application 
intended to store, and optionally separate, data. A single front end class that can
communicate with any user interface (for example: a console, a graphical user interface,
or a web application).


View - The view is represented by a Java Server Page,
with data being transported to the page in the HttpServletRequest or HttpSession.

Controller - The Controller servlet communicates with the front end of the model and loads the HttpServletRequest or HttpSession with appropriate data,
before forwarding the HttpServletRequest and Response to the JSP using a RequestDispatcher.

您应该创建一个从 Login.jsp 调用的 Servlet,然后从请求中获取参数,然后检查凭据。然后在验证凭据后执行维护会话等任务。如果提供了错误的凭据,则从 servlet 重定向到带有参数的 Login.jsp,或者在用户通过身份验证后重定向到其他页面。

【讨论】:

您能否提供资源,让我可以详细了解它应该如何实现?

以上是关于在 JSP 中实现登录页面的优雅方式的主要内容,如果未能解决你的问题,请参考以下文章

在 Hibernate 中实现基于条件的搜索页面的优雅方式

如何在一个jsp网页中实现数据库查询和显示结果

如何在 Wordpress 中实现我的自定义登录页面?

Axure中怎么实现变量值在页面中的传递

我在 ios 应用程序中实现了谷歌登录。现在,我如何验证用户是不是已登录,如果没有 - 使用 Swift 将他返回到登录页面?

html 返回登录前页面