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. Rocket - tilelink - AsyncCrossing

    https://mp.weixin.qq.com/s/v8plWCBD8vZkxykjJe4TCg   介绍AsyncCrossing的实现,主要介绍如何实现diplomacy Node和LazyMo ...

  2. 折腾自己的js闭包(二)

    前面我大致探讨了js里的闭包的相关概念,那么,到底在什么时候用它最好呢?存在即真理,只不过以前没发现它而已,先来看看下面的这几个用途吧 一.我首先想到的就是从函数外面访问它的内部变量,从而达到自己的一 ...

  3. 【Springboot HBase】遇到的一些问题

    想要运行的代码需要在application中运行 使用@Component并实现CommandLineRunner接口.重写方法@Override run( ) @Component public c ...

  4. JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性:②更好 ...

  5. ASP.NET中使用Entity Framework开发登陆注册Demo

    这里更多的是当作随身笔记使用,记录一下学到的知识,以便淡忘的时候能快速回顾 当前步骤是该项目的第一部分 第一部分(当前) 第二部分 大完结版本 直接上步骤,有类似的开发登陆注册也可以参考. 登陆注册的 ...

  6. Java实现 蓝桥杯VIP 基础练习 时间转换

    问题描述 给定一个以秒为单位的时间t,要求用"h️s" 的格式来表示这个时间.H表示时间,M表示分钟,而s表示秒,它们都是整数且没有前导的"0".例如,若t=0 ...

  7. Java实现 蓝桥杯VIP 算法训练 ALGO-16进制转换

    算法训练 进制转换 时间限制:1.0s 内存限制:256.0MB 问题描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的 ...

  8. Java实现 LeetCode 127 单词接龙

    127. 单词接龙 给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度.转换需遵循如下规则: 每次转换只能改变一个字 ...

  9. Java实现 LeetCode 87 扰乱字符串

    87. 扰乱字符串 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = "great" 的一种可能的表示形式. grea ...

  10. Java实现 蓝桥杯 算法提高 双十一抢购

    试题 算法提高 双十一抢购 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 一年一度的双十一又来了,某网购网站又开始了半价销售的活动. 小G打算在今年的双十一里尽情地购物,以享受购买 ...