JavaWeb 登录与注销

大致流程

一般我们在Web应用中 登录页面一般是以 login.jsp的首页

大致流程如下:

当我们在前台写入用户名和密码之后,点击登录按钮

会将表单提交给一个LoginServlet

让它去验证用户名和密码是否正确

  1. 用户名或密码错误 重新返回登陆页面 并提示
  2. 登陆成功后 会进入自己WEB-INF的网页

进入系统里的网页后 有用户自己的信息显示

点击注销按钮 实现注销 重新回到登陆页面

登录

当点击提交按钮 会给LoginServlet处理请求 调用service方法

登陆成功后 会将个人信息放到Session 用于传递用户数据

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

		req.setCharacterEncoding("UTF-8");
// 1. 获取请求参数 得到输入的用户名和密码
String username = req.getParameter("username");
String pwd = req.getParameter("password");
// 2. 业务逻辑
User user = dao.getUserByUserName(username);
// 3. 控制页面跳转
if (user == null) {
req.setAttribute("errorMes","用户不存在");
req.getRequestDispatcher("/login.jsp").forward(req, resp);
return;
}
// 验证密码
if (!user.getPassword().equals(pwd)) {
req.setAttribute("errorMes","用户或密码错误");
req.getRequestDispatcher("/login.jsp").forward(req, resp);
return;
}
// 此时 用户名 和密码正确 共享用户信息 进入跳转页面
req.getSession().setAttribute("USER_IN_SESSION", user);
resp.sendRedirect("/product"); }

上述代码中dao.getUserByUserName(username) 方法是通过查询数据库用户名得到一个用户

public User getUserByUserName(String username) {
String sql = "SELECT * FROM t_user WHERE username = ?"; // 返回一个User对象
return JdbcTemplate.query(sql, new IResultSetHandler<User>() { @Override
public User handle(ResultSet rs) throws SQLException {
User user = new User();
while(rs.next()) {
user.setId(rs.getLong("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
}
return null;
}
}, username);
}

dao.getUserByUserName(username) 方法使用到了JDBC的查询操作

所以调用了JdbcTemplate.query方法

public static <T> T query(String sql,IResultSetHandler<T> rsh,Object...params){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection(); //连接
ps = conn.prepareStatement(sql); //语句对象
// 设置占位符值
for (int i = 0; i < params.length; i++) {
ps.setObject(i+1, params[i]);
} rs = ps.executeQuery(); //执行语句对象
// 调用结果集处理器的handle方法 返回一个结果
return rsh.handle(rs);
} catch (Exception e) {
e.printStackTrace();
}finally {
// 释放资源
JdbcUtil.close(conn, ps, rs);
}
return null;
}

防止没有登陆直接访问 处理系统内部的Servlet 在该Servlet中加一个判断

如果没有登陆 Session没有USER_IN_SESSION这个属性

则返回到登陆首页

// 根据USER_IN_SESSION 有无 判断此时用户是否 登陆 若无 则不能直接访问该页面
Object user = req.getSession().getAttribute("USER_IN_SESSION");
if (user == null) {
resp.sendRedirect("/login.jsp");
return;
}

注销

当点击注销按钮时 进入LoginServlet处理

可以让按钮带个参数 让Servlet调用注销方法

<a href="/login?method=logout">注销</a>

在LoginServlet的service方法中加入如下代码:

// 注销功能
String method = req.getParameter("method");
if ("logout".equals(method)) {
logout(req,resp);
return;
}

注销:销毁用户Session 跳转到登陆页面

private void logout(HttpServletRequest req, HttpServletResponse resp) {
// 销毁session 跳到登陆页面
req.getSession().invalidate();
try {
resp.sendRedirect("/login.jsp");
} catch (IOException e) {
e.printStackTrace();
}
}

JavaWeb的登陆与注销功能的更多相关文章

  1. django开发项目实例3--用session是实现简单的登陆、验证登陆和注销功能

    如果你的网页不是纯阅读型的,那么你很有可能希望在用户打开某些界面的时候需要验证用户是否登陆的信息, 虽然django里面有自带的一些user的类,但我看不懂,并且自己实现也不是很难,下面和大家分享一下 ...

  2. javaWeb注册,登陆,注销功能的实现

    一:注册页面:regist.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8& ...

  3. XMPP实现登陆注销功能

    XMPP框架的下载与导入等问题请参照 —— XMPP框架的分析.导入及问题解决 DEMO ——XMPP即时通讯(已导入框架)密码:3a7n 这篇我们利用XMPP框架来实现一下登陆功能,先来介绍一下XM ...

  4. JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  5. JS实现注销功能

    JS实现注销功能,代码如下: <script> window.history.forward(1); </script> 这个代码的用法就是: 比如,我们此时有两个页面:Log ...

  6. 「小程序JAVA实战」小程序我的个人信息-注销功能(42)

    转自:https://idig8.com/2018/09/06/xiaochengxujavashizhanxiaochengxuwodegerenxinxi-zhuxiaogongneng40/ 注 ...

  7. 使用springboot实现一个简单的restful crud——03、前端页面、管理员登陆(注销)功能

    前言 这一篇我们就先引入前端页面和相关的静态资源,再做一下管理员的登陆和注销的功能,为后续在页面上操作数据做一个基础. 前端页面 前端的页面是我从网上找的一个基于Bootstrap 的dashboar ...

  8. bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能

    xmlrpc .  https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...

  9. JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客

    JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客https://blog.csdn.net/KooKing_L/article/details/79711379

随机推荐

  1. dsPIC33EP单片机的PPS(外设引脚选择)

    利用dsPIC33EP单片机进行can通信的时候用到引脚复用 引脚复用通过查询数据手册: C1RX的寄存器为RPINR26.C1RXR=(设置为需要用到的引脚) 引脚设置为输入(C1RX),TRIS= ...

  2. 【图像处理】利用C++编写函数,绘制灰度图像直方图

    1. 简介 利用OpenCV读取图像,转换为灰度图像,绘制该灰度图像直方图.点击直方图,控制台输出该灰度级像素个数. 2. 原理 (1) 实现原理较为简单,主要利用了OpenCV读取图像,并转换为灰度 ...

  3. 利用Python进行数据分析第六季第七集

    翩翩一叶扁舟载不动许多愁https://www.wenjuan.com/s/uMRVrmv/双肩扛起的是数不尽的忧https://www.wenjuan.com/s/uMRVrmv给我一杯酒喝尽人间仇 ...

  4. 【Hadoop】hdfs文件上传流程图

  5. Linux、Android系统调用从上层到底层的调用路径浅析

    参考: https://blog.csdn.net/liuhangtiant/article/details/85149369 http://blog.sina.com.cn/s/blog_79433 ...

  6. JAVA-蓝桥杯-算法训练-字符串变换

    问题描述 相信经过这个学期的编程训练,大家对于字符串的操作已经掌握的相当熟练了.今天,徐老师想测试一下大家对于字符串操作的掌握情况.徐老师自己定义了1,2,3,4,5这5个参数分别指代不同的5种字符串 ...

  7. java实现第七届蓝桥杯煤球数量

    煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), - 如果一共有100层,共有多少个煤 ...

  8. test for OCr

  9. ubuntu12.04 跳过grub选择

    1.修改/etc/grub.d/00_head文件. set timeout=-1 修改成 set timeout = ${GRUB_RECORDFAIL_TIMEOUT:--1} 2.修改/etc/ ...

  10. redis的5种数据结构和基本操作

    1.字符串(string) 1.1设置值 set key value [ex seconds] [px milliseconds] [nx|xx] 例如: 127.0.0.1:6379> set ...