处理登录后跳转到之前受保护的页面:
在我们上网的时候,经常会遇到有些页面是受保护的,也就是需用先登录了以后才能访问到该页面
当我们没登录直接访问这些受保护的页面的时候,系统会自动跳转到登录页面
然后我们登录成功以后,系统就又会自动跳转到之前受保护的页面
那么这种功能效果是怎么做出来的呢。其实很简单,我们在跳转到登录页面把之前页面的URL记录下来
这里的记录有两种方式,一种是直接记录在session中,一种是以一个参数传递给将这个URL传递给登录页面
当登录成功以后,再跳回这个记录的这个URL就可以了
但是需要注意之前的页面可能有参数,我们需要把人家的参数也一同保存起来。
下面就看一个小例子:
1、首先是两个受保护的页面protectedPage1.jsp和protectedPage2.jsp
<body> this is first protected page. <br> <% String user = request.getParameter("user"); out.print("user=" + user); %> </body>
<body> this is second protected page. <br> <% String two = request.getParameter("two"); out.print(two); %> <br> <% String user = request.getParameter("user"); out.print("user=" + user); %> </body>
2、然后是登录页面login.jsp
<body> <form action="/recoveryPage/ToProtectedServlet" method="post"> userName:<input type="text" name="user"> <input type="submit" value="submit"> </form> </body>
3、到达两个受保护页面的Servlet,FirstServlet.java和SecondServlet.java
其中使用到了URLUtil这个工具类,下面会有这个工具类的说明
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); String user = request.getParameter("user"); if (user == null || "".equals(user)) { session.setAttribute("newURL", URLUtil.dealURL("WEB-INF/jsp/protectedPage1.jsp")); request.getRequestDispatcher("WEB-INF/jsp/loginPage.jsp").forward(request, response); return; } request.setAttribute("user", user); request.getRequestDispatcher("WEB-INF/jsp/protectedPage1.jsp").forward(request, response); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); String two = request.getParameter("two"); String user = request.getParameter("user"); if (user == null || "".equals(user)) { session.setAttribute("newURL", URLUtil.dealURL("WEB-INF/jsp/protectedPage2.jsp?two=" + two)); request.getRequestDispatcher("WEB-INF/jsp/loginPage.jsp").forward(request, response); return; } request.setAttribute("user", user); request.getRequestDispatcher("WEB-INF/jsp/protectedPage2.jsp?two=" + two).forward(request, response); }
4、处理登录页面的Servlet
HttpSession session = request.getSession(); String newURL = (String) session.getAttribute("newURL"); String oldURL = URLUtil.getURL(newURL); System.out.println("oldURL=" + oldURL); String user = request.getParameter("user"); if (user == null || "".equals(user)) { request.getRequestDispatcher("WEB-INF/jsp/loginPage.jsp").forward(request, response); return; } String newOldURL = URLUtil.appendArges(oldURL, new String[] { "user=" + user }); System.out.println("newOldURL" + newOldURL); request.getRequestDispatcher(newOldURL).forward(request, response);
5、URL处理工具类
注意:上面使用的是session传递保护页面的地址,所以我们不用对保护页面的URL进行处理
但是如果是在参数中传递一个url的参数对象,那么我们就需要对保护页面的URL处理,
需要将原来的URL中的?和&符合替换,不然会导致跳转到登录页面的URL错误。(一个URL不能有多个?)
这里的替换很简单,可以使用其他字符换掉?和&就可以了,在获得保护页面的URL的时候,再替换回来就行
public class URLUtil { public static String dealURL(String oldURL) { String newURL = oldURL; return newURL; } public static String getURL(String newURL) { String oldURL = newURL; return oldURL; } public static String appendArges(String url, String[] arges) { if (url.indexOf("?") == -1) { url = url + "?" + arges[0]; } else { url = url + "&" + arges[0]; } for (int i = 1; i < arges.length; i++) { url = url + "&" + arges[i]; } String newOldURL = url; return newOldURL; } }
其他的一些配置就不贴了,比如Servlet的映射等等。
这个时候我们可以进行测试:
<html> <body> <h2> <a href="/recoveryPage/FirstServlet">to one protected page</a><br> <a href="/recoveryPage/SecondServlet?two=2">to two protected page</a> </h2> </body> </html>
好了,这样就可以完成上面说的功能了。
相关推荐
在Web应用开发中,用户登录系统是常见的功能模块,它允许用户通过提供有效的身份凭证(通常是用户名和密码)来访问受保护的资源。在这个简单用户登录的例子中,我们主要关注的是前端界面的构建以及与后端交互的基本...
9. **页面重定向**:登录成功后,系统可能会使用Response.sendRedirect()方法将用户重定向到主页或其他受保护的页面;而登录失败,则可能返回到登录页面并显示错误信息。 10. **部署与运行**:最后,整个JAVA WEB...
本文将详细介绍如何在Spring Security框架下配置多登录页面,包括前台与后台用户的分开登录界面,以及注销登录后返回到不同的页面等功能。 #### 一、Spring Security简介 Spring Security是Spring家族中的一个子...
本示例文件"Web开发-Flask Login登录成功返回上一页-Python源码示例.zip"专注于解决一个常见的用户体验问题:用户在登录后如何返回到他们之前试图访问的页面。这一功能在很多网站中都很常见,如电子商务平台、社交...
- **登录检查**:在访问受保护的资源之前,过滤器可以检查用户是否已登录,未登录则重定向至登录页面。 - **安全过滤**:过滤非法字符,防止SQL注入或XSS攻击。 - **日志记录**:记录请求和响应的信息,便于分析...
在构建Web应用的过程中,登录界面是必不可少的一部分,它允许用户输入凭证以验证其身份并访问受保护的内容。在这个名为“web-登录界面html”的资源中,我们主要涉及到以下几个技术领域:HTML、CSS、JavaScript和PHP...
如果用户在这段时间内没有进行任何操作,其会话将被销毁,之后访问应用中的受保护资源时,将会触发自定义拦截器,从而被重定向到登录页面。 #### 配置拦截器 接下来,在Spring MVC的配置文件中注册自定义拦截器。...
在Java Web程序设计中,尤其是涉及用户交互的部分,资源的上传、下载和删除是常见的功能。这些操作通常与登录认证紧密关联,确保只有合法用户能够访问和管理资源。本章节我们将探讨如何在JSP(JavaServer Pages)...
4. **Cookie管理**:登录成功后,服务器通常会返回一个Session ID或Cookie,模拟登录程序需要保存并使用这些信息来维持会话,以便后续访问受保护的页面。 5. **验证码处理**:如果登录页面有验证码,可能需要额外的...
3. **验证成功后的操作**:如果验证成功,我们可以创建一个新的Session对象,将用户信息存入Session,然后重定向到受保护的页面。若验证失败,则返回登录页面并显示错误信息。 4. **保护受密码保护的页面**:在受...
这个"JAVA密码保护页面"可能是实现了一个简单的登录系统,允许用户输入凭证来验证其身份,从而访问受保护的内容。下面我们将详细讨论如何在Java中构建这样的功能,以及涉及到的相关技术知识点。 首先,我们需要理解...
2. **使用JavaScript阻止后退**:接下来,在前端页面中加入一段JavaScript代码,用于在用户退出登录时执行特定操作,防止用户通过后退按钮回到之前的页面。 下面是一段示例代码,展示了如何使用JavaScript来实现这...
通过这样的配置和实现,我们可以确保只有登录用户才能访问特定的受保护资源,而未登录用户会被引导回到主页。这个过程是Web应用程序中常见的安全实践,有助于保护用户的隐私和数据安全。同时,它也提高了用户体验,...
// 登录成功,重定向到主页面或其他受保护的页面 Response.Redirect("Default.aspx"); } else { // 登录失败,显示错误消息 lblMessage.Visible = true; lblMessage.Text = "用户名或密码错误,请重试。"; ...
在IT行业中,Web单点登录(Single Sign-On,简称SSO)是一种常见的身份验证机制,它允许用户通过一次登录即可访问多个相互关联的应用系统,提高了用户体验并降低了管理复杂性。本教程将指导你如何使用J2EE技术,特别...
在Web应用程序中,一个常见的需求是确保用户登录后能够返回到他们尝试访问的原始页面,尤其是在他们因未登录或会话超时而被重定向到登录页面后。本文将探讨如何使用 Shiro 实现这一功能。 首先,有两种常见的实现...
在现代Web应用开发中,Vue.js已成为流行的前端框架之一,而axios是一个...这不仅能有效防止未经授权的用户访问敏感页面,还能提升用户的体验,使其在token失效时能即时地被引导进行登录,从而安全地访问受保护的路由。
在Java Web应用中,过滤器(Filter)是一种特殊的组件,它可以在请求到达目标资源(如Servlet或JSP页面)之前拦截这些请求,并在请求完成之后返回给客户端前再次拦截响应。过滤器通常用于执行一些预处理工作,比如...
在Web开发中,登录页面是用户访问受保护内容的第一步,通常包括输入用户名和密码的表单,以及登录按钮。这个主题涵盖了以下几个关键知识点: 1. HTML与CSS基础:登录页面的前端设计通常使用HTML(超文本标记语言)...