点击页面先登录,登录后继续之前页面

登录诸如当当网之类的购物网站,未登录前可以先将产品放入购物车,当点击结账的时候会先跳出登录页面,登录后,继续跳至结账页面。一直想写一个类似的demo,终于昨天写了一个,记录下来。

先看代码吧,看完再讲代码。

代码块

后台

包含两个servlet,一个domain对象。

CheckLogin.java

package com.login;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class CheckLogin
 */
@WebServlet("/res/viaLogin")
public class CheckLogin extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public CheckLogin() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		HttpSession session = request.getSession();

		User user = (User)session.getAttribute("user");

		String url = request.getParameter("url");
		if (!"".equals(url)) {
			session.setAttribute("url", url);
		}

		if (null != user){
			request.getRequestDispatcher("myOrder.jsp").forward(request, response);
		} else {
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

LoginServlet.java

package com.login;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/res/login")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();

		User user = new User();
		session.setAttribute("user", user);

		String url = (String) session.getAttribute("url");
		if (null == url || "".equals(url)) {
			request.getRequestDispatcher("main.jsp").forward(request, response);
		} else {
			request.getRequestDispatcher(url).forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

User.java

package com.login;

public class User {

}

前台页面

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Register</title>
</head>
<body>
<center>
	<form action="login">
		<table>
			<caption>登陆</caption>
			<tr>
				<td>username</td><td><input name="username" /></td>
			</tr>
			<tr>
				<td>password</td><td><input name="password" type="password"/></td>
			</tr>
			<tr>
				<td colspan="2" align="center"><input type="submit" value="Submit" /></td>
			</tr>
		</table>
	</form>
</center>
</body>
</html>

main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Main</title>
</head>
<body>

<center> This is main jsp <br><br>
	<a href="#" onclick="myOrder(this)">我的订单</a><br><br>
	<a href="login.jsp">登陆</a>
</center>

<script type="text/javascript">
	function myOrder(obj) {
    	var url = "myOrder.jsp";
        window.location.href = "viaLogin?url=" + url;
	}
</script>
</body>
</html>

myOrder.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>MyOrder</title>
</head>
<body>
<center><h1>我的订单,登陆后可见</h1></center>
</body>
</html>

页面效果

主页面

登录页面

我的订单页面

代码讲解

首页面包含内容

<center> This is main jsp <br><br>
	<a href="#" onclick="myOrder(this)">我的订单</a><br><br>
	<a href="login.jsp">登陆</a>
</center>

<script type="text/javascript">
	function myOrder(obj) {
    	var url = "myOrder.jsp";
        window.location.href = "viaLogin?url=" + url;
	}
</script>

其中点击我的订单时,请求登录验证,同时将我的订单页面的URL传递至后台。

登录验证servlet CheckLogin.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		HttpSession session = request.getSession();

		User user = (User)session.getAttribute("user");

		String url = request.getParameter("url");
		if (!"".equals(url)) {
			session.setAttribute("url", url);
		}

		if (null != user){
			request.getRequestDispatcher("myOrder.jsp").forward(request, response);
		} else {
			request.getRequestDispatcher("login.jsp").forward(request, response);
		}
	}

先获取session,然后在session中获取该user对象。

同时,将URL后面的参数项url,即本应该跳转到的页面保存在session中。

若user对象不为空,则直接跳转至我的订单myOrder.jsp页面;如果user为空,则跳转至登录页面login.jsp页面。

登录servlet LoginServlet.java

/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();

		User user = new User();
		session.setAttribute("user", user);

		String url = (String) session.getAttribute("url");
		if (null == url || "".equals(url)) {
			request.getRequestDispatcher("main.jsp").forward(request, response);
		} else {
			request.getRequestDispatcher(url).forward(request, response);
		}
	}

登录处理,new一个user出来,这里只是做示例,没有给user定义属性信息等,将user保存在session中,同时从session中获取到之前存放的url。

判断 url是否为null 或 空字符串:

如果是null或空字符串,则说明上一步的操作就是登录操作,这时候跳转至主页面main.jsp;

如果url不为null,则说明上一步应该是在访问某个页面,但是因为没有登录,被拦截到了登录页面,此时登录后,就应该继续之前的请求。

以上例子疏于整理,校验,如有不详尽之处,烦请提出,后面必改正,谢谢。

时间: 2024-10-05 06:36:13

点击页面先登录,登录后继续之前页面的相关文章

使用Shiro登录成功后,跳转到之前访问的页面实现

转:http://blog.csdn.net/lhacker/article/details/20450855 很多时候,我们需要做到,当用户登录成功后,跳转回登录前的页面.如果用户是点击"登录"链接去到登录页面进行登录的,我们很容易跟踪用户的登录前的页面.比如,在"登录"链接后加一个url参数,如:http://www.xxx.com/login.html?url=http://www.xxx.com/xx.html,这个url就是当前页面.用户浏览不同页面,&q

Oracle Enterprise Manager 11g 输入用户名和口令 点击“登录”按键后没反应,也不报错,是什么原因?

在tnsnames.ora文件中检查设置好像没什么问题,用sqlplus也可以正常操作orcl 问题找到了,其实可简单,https://localhost:1158/em/console/logon/logon#,我用的是IE8打开这个地址,后来注意到左下角的状态栏里显示有“网页上有错误”的提示,于是改用Firefox打开,输入用户名和密码,登录就正常了.原因是IE8在解析这个页面时,部分js代码解析错误,我想这个跟微软的垄断霸王标准有关,他的很多规则不符合国际标准.所以电脑上还是多装个浏览器比

实现从页面登录后返回该页面

1. js 代码 /*获取源页面的url*/ var path = window.location.pathname.substr(7); /*将源页面的url作为参数传递到控制层*/ window.location.href="url?origin="+path; 2. java 代码 @RequestMapping(value = "/url") public String doLogin(String origin,HttpSession session){

IdentityServer4 登录成功后,跳转到原来页面

IdentityServer4 登录成功后,默认会跳转到Config.Client配置的RedirectUris地址http://localhost:5003/callback.html,用于获取 Token,比如跳转后的地址: http://localhost:5003/callback.html#id_token=eyJhbGciOiJSUzI1NiIsImtpZCI6IjkwYWRmOTliMDhmODExMjBiMzdlMWI1NzVmMDliODcwIiwidHlwIjoiSldUIn

用python+selenium登录cnblog后新增文章后再次删除该文章并验证

目的:登录cnblog后新增文章后再次删除该文章并验证 代码如下: #coding: utf-8 from selenium import webdriver from time import sleep import unittest import time class DeletePost(unittest.TestCase):     def setUp(self):         self.dr = webdriver.Chrome()         self.dr.maximize

JS 页面离开事件 页面关闭事件,实现登录成功返回上个页面

壹 ? 引 登录成功后跳转到上一个页面是很常见的需求,比如在天猫添加购物车时网站会效验用户登录情况,若未登录则跳转登录,登录成功返回到先前的商品页. 这个功能实现并不困难,但因为我的奇思妙想让我先后了解了window.history对象以及窗口关闭/离开事件onbeforeunload,那么让这个需求做个引子,让我们开始一次有趣的探索之旅. 贰 ? 有趣的onbeforeunload 不管是从什么页面进入的登录页,总是得先有个离开页面的过程,那我在离开前一个页面时先记住页面,登录成功调回来不就好

win7如何不用点击用户名 直接自动登录桌面

win7如何不用点击用户名 直接自动登录桌面 在win7系统中开机时必须点击相应的用户名才能登陆系统桌面那么如何取消这一功能使当前账户自动登录到系统桌面呢? 1 .在开始菜单搜索框输入 “netplwiz” 按回车,打开高级用户控制面板: 2.在高级用户控制面板中,取消对“要使用本机,用户需输入用户名和密码(E)”项的勾选: 3.系统将弹出窗口要求输入默认登录系统的用户名和密码,输入完成后点击确定: 4.重启Windows 7,即可发现系统自动以默认用户登录 自动登录只能选一个账户即只能对一个账

php判断页面是电脑登录还是手机登录

首先说最根本的解决方法: 手机访问时,会附带发送user-agent信息,这个信息里面会有手机号码信息,那么如果能取得手机号码,则可以肯定是通过手机wap访问的.但是目前 中国移动已经屏蔽了user-agent信息,所以获取不到手机号码.有关系的朋友可以联系移动公司,把wap网站服务器的ip提交给中国移动,加入白名 单后即可取得ua信息.目前中国联通可以直接取到手机号,对联通用户此方案可完美实施. 接下来说我的解决方案: 手机访问,原理是手机通过移动公司的代理服务器进行的访问.那么我们就可以理解

Codeigniter处理用户登录验证后URL跳转

涉及到My_Controller.php以及登录验证模块User.php,代码如下: My_Controller.php class MY_Controller extends CI_Controller { public function __construct() { parent::__construct(); /*判断是否登录,判断当前URL是否是auth/login*/ if ( ! $this->tank_auth->is_logged_in() && ( $thi