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
随机推荐
- 【JavaScript数据结构系列】03-队列Queue
[JavaScript数据结构系列]03-队列Queue 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识队列Queue结构 队列,跟我们的日常生活非常贴近,我们前面举例了食堂排队打 ...
- nodejs模块介绍与使用
1.内置模块 http fs path url os等等 (无需安装直接require引入即可) 2.第三方模块: express mysql ejs等等 (npm包管理工具下载require引入) ...
- pyqt5-多线程初步
多线程是实现并发的一个重要手段.在GUI编程中,经常需要将耗费时间较多的任务分离出来成为一个线程,避免对主线程造成影响(造成界面无响应). 在Qt中,最简单的多线程主要通过继承QThread类实现,重 ...
- vue采用history路由的服务器部署问题
发现部署问题 在部署的时候发现打开的页面是空白 之前部署原理 之前的页面都是作为静态文件形式打包上传到服务器上 http://www.xiedashuaige.cn/bolg2.0/#/home 就和 ...
- Github自动打包并推送Nuget版本
如何将自己的类库,自动打包并自动发布到Nuget? 1. 项目csproject属性修改 新建一个项目GitToNugetPackageTest 不用添加任何类,我们修改csproject属性. 替换 ...
- SpringBoot—自定义线程池及并发定时任务模板
介绍 在项目开发中,经常遇到定时任务,今天通过自定义多线程池总结一下SpringBoot默认实现的定时任务机制. 定时任务模板 pom依赖 <dependencies> <dep ...
- pandas删除DataFrame中任意字段等于'null'字符串的行
删除df中任意字段等于'null'字符串的行: df=df.astype(str)#把df所有元素转为str类型 df=df[df['A'].isin(['null','NULL'])] #找出df的 ...
- windows下nodejs的安装
1.下载 从nodejs官网下载地址:http://www.nodejs.org 2.安装 双击node-v4.4.0-x64.msi或者其他版本 3.环境搭建 进入cmd命令窗口 进入到nodejs ...
- 【译】Welcome to C# 9.0
C# 9.0正在形成,我想分享我们对添加到该语言下个版本的一些主要功能的看法.对于每个新版本的 C#,我们努力使常见的编码方案更加清晰和简单,C# 9.0 也不例外.这次的一个特别重点是支持数据形状的 ...
- java方法句柄-----3.方法句柄的实现接口
目录 1.使用方法句柄实现接口 1.使用方法句柄实现接口 2.3节介绍的动态代理机制可以在运行时为多个接口动态创建实现类,并拦截通过接口进行的方法调用.方法句柄也具备动态实现一个接口的能力.这是通 ...