在 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 中实现登录页面的优雅方式的主要内容,如果未能解决你的问题,请参考以下文章
我在 ios 应用程序中实现了谷歌登录。现在,我如何验证用户是不是已登录,如果没有 - 使用 Swift 将他返回到登录页面?