JavaWeb的登陆与注销功能
JavaWeb 登录与注销
大致流程
一般我们在Web应用中 登录页面一般是以 login.jsp的首页
大致流程如下:
当我们在前台写入用户名和密码之后,点击登录按钮
会将表单提交给一个LoginServlet
让它去验证用户名和密码是否正确
- 用户名或密码错误 重新返回登陆页面 并提示
- 登陆成功后 会进入自己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的登陆与注销功能的更多相关文章
- django开发项目实例3--用session是实现简单的登陆、验证登陆和注销功能
如果你的网页不是纯阅读型的,那么你很有可能希望在用户打开某些界面的时候需要验证用户是否登陆的信息, 虽然django里面有自带的一些user的类,但我看不懂,并且自己实现也不是很难,下面和大家分享一下 ...
- javaWeb注册,登陆,注销功能的实现
一:注册页面:regist.jsp: <%@ page language="java" contentType="text/html; charset=UTF-8& ...
- XMPP实现登陆注销功能
XMPP框架的下载与导入等问题请参照 —— XMPP框架的分析.导入及问题解决 DEMO ——XMPP即时通讯(已导入框架)密码:3a7n 这篇我们利用XMPP框架来实现一下登陆功能,先来介绍一下XM ...
- JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)
一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...
- JS实现注销功能
JS实现注销功能,代码如下: <script> window.history.forward(1); </script> 这个代码的用法就是: 比如,我们此时有两个页面:Log ...
- 「小程序JAVA实战」小程序我的个人信息-注销功能(42)
转自:https://idig8.com/2018/09/06/xiaochengxujavashizhanxiaochengxuwodegerenxinxi-zhuxiaogongneng40/ 注 ...
- 使用springboot实现一个简单的restful crud——03、前端页面、管理员登陆(注销)功能
前言 这一篇我们就先引入前端页面和相关的静态资源,再做一下管理员的登陆和注销的功能,为后续在页面上操作数据做一个基础. 前端页面 前端的页面是我从网上找的一个基于Bootstrap 的dashboar ...
- bugzilla4的xmlrpc接口api调用实现分享: xmlrpc + https + cookies + httpclient +bugzilla + java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能
xmlrpc . https . cookies . httpclient.bugzilla . java实现加密通信下的xmlrpc接口调用并解决登陆保持会话功能,网上针对bugzilla的实现很 ...
- JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客
JEECG--去掉(增加)登陆页面验证码功能 - CSDN博客https://blog.csdn.net/KooKing_L/article/details/79711379
随机推荐
- 选择器&隔行换色
选择器的使用理解为:执行jQuery核心函数,传入选择器的字符串 $( ... ) 基本选择器 <!DOCTYPE html> <html> <head> & ...
- 接口(interface)的使用
类实现接口就具有接口的功能 实现可以多实现,实现多个接口 package cm.aff.abst; /* 接口(interface)是与类并行的一个概念 1. 接口可以看做是一个特殊的抽象类,是常量与 ...
- Remote desktop cannot verify?教你如何应对
远程桌面:IIS7远程桌面IIS7远程桌面管理工具(3389.vps.服务器批量管理.批量远程工具)简介: 1.批量管理WIN系列服务器,VPS,电脑. 2.批量导入服务器的IP,端口,账号和密码 ...
- CentOS8的网络管理变化
资料来源: https://www.cnblogs.com/linuxandy/p/10839856.html 1.CentOS8使用NetworkManager.service(简称NM)来管理网络 ...
- 微信小程序路由跳转(navigateTo,redirectTo ,switchTab ,reLaunch )
navigateTo, redirectTo 只能打开非 tabBar 页面. switchTab 只能打开 tabBar 页面. reLaunch 可以打开任意页面. 通过redirect重定向的页 ...
- Rocket - interrupts - Parameters
https://mp.weixin.qq.com/s/eD1_hG0n8W2Wodk25N5KnA 简单介绍interrupts相关的Parameters. 1. IntRange 定义一个中断号区间 ...
- Java实现 蓝桥杯VIP 算法训练 无权最长链
试题 算法训练 无权最长链 问题描述 给定一个n节点m边的无圈且连通的图,求直径 输入格式 第一行两个数字n,m 接下来m行每行两个数字x,y,代表x,y之间有一条边 输出格式 要求用户的输出满足的格 ...
- Java实现 LeetCode 712 两个字符串的最小ASCII删除和(最长公共子串&&ASCII值最小)
712. 两个字符串的最小ASCII删除和 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 ...
- Java实现 蓝桥杯VIP 算法训练 方格取数
问题描述 设有NN的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0. 某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下角的B点 ...
- Java实现洛谷 P2802 回家
P2802 回家 时间限制 1.00s 内存限制 125.00MB 题目描述 小H在一个划分成了n*m个方格的长方形封锁线上. 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离 ...