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

     2023-02-16     307

关键词:

【中文标题】在 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,或者在用户通过身份验证后重定向到其他页面。

【讨论】:

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

在 C++ 聚合类中实现调用多路复用的优雅方式?

】在C++聚合类中实现调用多路复用的优雅方式?【英文标题】:ElegantwayofimplementingcallmultiplexinginaC++aggregateclass?【发布时间】:2011-08-2912:12:55【问题描述】:当多路复用对许多子对象的调用时,防止循环样板代码的优雅方法是什... 查看详情

如何在 servlet jsp 中实现生产就绪登录注销功能

】如何在servletjsp中实现生产就绪登录注销功能【英文标题】:howtoimplementproductionreadyloginlogoutfunctionalityinservletjsp【发布时间】:2017-10-1110:31:28【问题描述】:我的问题很简单——如何在servletjsp中实现login-logout?以下是用例...我... 查看详情

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

】如何在Wordpress中实现我的自定义登录页面?【英文标题】:HowcanIimplementmycustomlandingpageintoWordpress?【发布时间】:2021-06-2018:52:59【问题描述】:我目前正在从事一个在Docker上的Node.js上运行的项目。为此,我使用Bootstrap构建了一... 查看详情

如何在 JSF 中实现登录过滤器?

】如何在JSF中实现登录过滤器?【英文标题】:HowimplementaloginfilterinJSF?【发布时间】:2012-01-1818:55:18【问题描述】:即使用户知道某些页面的url,我也想阻止某些页面的访问。例如/localhost:8080/user/home.xhtml(需要先登录)如果没... 查看详情

java示例代码_在web应用程序中实现HTTPS登录页面

java示例代码_在web应用程序中实现HTTPS登录页面 查看详情

Vue.js:在 laravel 中实现 MPA(多页面应用程序)的最佳方式

】Vue.js:在laravel中实现MPA(多页面应用程序)的最佳方式【英文标题】:Vue.js:BestwaytoimplementMPA(Multipageapp)inlaravel【发布时间】:2018-06-2218:16:16【问题描述】:我已经四处寻找了很长一段时间,但没有得到任何召集。在laravel中实... 查看详情

如何在 Grails 中实现超时页面

】如何在Grails中实现超时页面【英文标题】:HowtoimplementatimeoutpageinGrails【发布时间】:2011-10-2600:59:52【问题描述】:我需要一些帮助来处理Grails应用程序中的超时问题。上下文:在我的Grails应用程序中,我显示了敏感信息。显... 查看详情

html返回登录前页面

...过html代码实现登录以后跳转到登录前的页面;在html页面中实现而不是在Page_Load中实现输出可以在点登录的前一个页面点击时传一个值,如login.php?url="123.html"login.php里面用$_GET[\'url\'];获得之前的页面的URL,登录成功之后输入出echo... 查看详情

在 Angular 中实现 OAuth 2.0 授权代码授予

】在Angular中实现OAuth2.0授权代码授予【英文标题】:ImplementingOAuth2.0AuthorizationcodegrantinAngular【发布时间】:2019-07-0705:53:42【问题描述】:我们必须在我的客户项目中集成OAuth2.0授权码授予。目前,该应用程序使用本机登录页面。... 查看详情

用servlet与jsp中实现分页查询

这个题目,总共分4个部分1.查询总页数,把页码显示在页面上2.把每页的内容显示在页面上3.首页,尾页,上一页,下一页4.下拉列表中的页数,(根据页数变动,选中第几页提交到第几页)详解如下:(一部分代码在servlet中,... 查看详情

.netcore中实现h5微信登录(静默授权方式)(代码片段)

需求假设现在有一个H5需要有微信登录、手机号登录、邮箱登录三种登录方式。让我们一起来看看微信登录如何实现吧界面:最终实现的效果图(登录成功后返回个人页):因为微信登录目前没有实现移动端的其他浏览器授权登录... 查看详情

如何在优雅地spring中实现消息的发送和消费

本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQClient端集成为spring-boot-starter框架的开发细节,然后通过一个简单的示例来一步一步的讲解如何使用这个spring-boot-starter工具包来配置,发送和... 查看详情

如何在 Angular 4 中实现 google auth 登录

】如何在Angular4中实现googleauth登录【英文标题】:Howtoimplementthegoogleauthlogininangular4【发布时间】:2019-01-1600:46:58【问题描述】:我是Angular的新手,我坚持使用google登录。我创建了一个按钮,单击它不会将我重定向到谷歌登录页... 查看详情

如何在 VueJS 中实现 Google 登录 API?

】如何在VueJS中实现Google登录API?【英文标题】:howtoimplementGoogleLoginAPIinVueJS?【发布时间】:2018-11-1900:40:47【问题描述】:所以我使用的是来自https://developers.google.com/identity/sign-in/web/的指南和代码当我点击按钮时,它工作正常,... 查看详情

如何在登录系统中使用会话并在codeigniter中实现注销

】如何在登录系统中使用会话并在codeigniter中实现注销【英文标题】:howtousesessioninloginsystemandimplementlogoutincodeigniter【发布时间】:2015-11-0522:49:09【问题描述】:codeigniter的新手正在学习它并坚持使用codeigniter的会话。我正在开发... 查看详情

如何在一个form表单中实现多个submit

 Asweallknow,通过设置inputtype=“submit”,我们可以把form表单中的值通过post方式传递给action所指向的页面。下图中,我们可以把userName,userAge,userSex这三个值传递到xxx.jsp<formaction="xxx.jsp"method="post">   &nb 查看详情

如何在jsp页面中实现对数据库的增删查改?

在JSP页面中使用AJAX,通过URL跳转到Spring的控制层完成相应增删查改业务。如何将控制层取得结果返回到当前JSP页面中并显示出来!前端JS,AJAX,后端SpringMVC,数据库用的MySQL。运行工具Eclipse以下是部分代码首先我觉得你的问题不太... 查看详情

如何在我的项目中实现 Grails 的 Shiro 安全性

】如何在我的项目中实现Grails的Shiro安全性【英文标题】:howtoimplementShiroSecurityofGrailsinmyProject【发布时间】:2011-08-1411:55:53【问题描述】:我是Grails的新手,使用了一些Shiro安全性。我创建了一个带有登录页面的小网站,如果登... 查看详情