GDPU JavaWeb 过滤器

再纯净的白开水也过滤不了渣茶。

Servlet登陆页面

引入数据库,创建用户表,包括用户名和密码:客户端通过login.jsp发出登录请求,请求提交到loginServlet处理。如果用户名和密码跟用户表匹配则视为登录成功,跳转到loginSuccess.jsp页面,显示“欢迎你”跟用户名;否则跳转到loginFail.jsp页面,显示“登录失败”,通过超链接返回login.jsp。

旧题重拾,不过是多了个连接数据库,修改一下servlet即可。

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.RequestDispatcher;
import java.io.IOException;
import java.sql.*;@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {// 数据库连接信息private static final String url = "jdbc:mysql://localhost:3306/dbjsp?serverTimezone=UTC";private static final String user = "root";private static final String psd = "123456";protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 设置响应的内容类型及字符编码response.setContentType("text/html;charset=utf-8");// 获取提交的用户名和密码String username = request.getParameter("username");String password = request.getParameter("password");// 检查用户名和密码是否在数据库中匹配if (checkLogin(username, password)) {// 登录成功,重定向到登录成功页面RequestDispatcher dispatcher = request.getRequestDispatcher("loginSuccess.jsp?username=" + username);dispatcher.forward(request, response);} else {// 登录失败,重定向到登录失败页面RequestDispatcher dispatcher = request.getRequestDispatcher("loginFail.jsp");dispatcher.forward(request, response);}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// POST请求时直接调用doGet方法处理doGet(request, response);}// 验证登录方法private boolean checkLogin(String username, String password) {boolean b = false;Connection conn = null;PreparedStatement stmt = null;ResultSet rs = null;try {// 连接数据库Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection(url, user, psd);// 查询用户String sql = "SELECT * FROM student2 WHERE id = ? AND psd = ?";stmt = conn.prepareStatement(sql);stmt.setString(1, username);stmt.setString(2, password);rs = stmt.executeQuery();// 如果有匹配的记录,则登录验证成功if (rs.next()) {b = true;}} catch (Exception e) {e.printStackTrace();} finally {// 关闭数据库连接try {if (rs != null) rs.close();if (stmt != null) stmt.close();if (conn != null) conn.close();} catch (Exception e) {e.printStackTrace();}}return b;}
}

 

 

Servlet过滤器

编写过滤器实现用户登录身份验证,防止未经登录用户越权访问页面。 

登录页面 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="LoginServlet2" method="post"><label for="username">Username:</label><input type="text" id="username" name="username"><br><br><label for="password">Password:</label><input type="password" id="password" name="password"><br><br><input type="submit" value="Login">
</form>
</body>
</html>

主页 

<%@ page import="Servlet.User" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Welcome</title>
</head>
<body>
<h2>欢迎来到网站!</h2>
<%User user = (User) session.getAttribute("user");String username = user.getUsername();
%>
<p>您已登录: <%= username %></p>
</body>
</html>

User用户实体类 

package Servlet;public class User {private String username;private String password;//    public User(String username, String password) {
//        this.username = username;
//        this.password = password;
//    }public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

 Servlet类

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 Servlet.User;@WebServlet("/LoginServlet2")
public class LoginServlet2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String username = request.getParameter("username");String password = request.getParameter("password");if ("gdpu".equals(username) && "123".equals(password)) {User user = new User();user.setUsername(username);user.setPassword(password);request.getSession().setAttribute("user", user);//            response.sendRedirect("index1.jsp");request.getRequestDispatcher("index1.jsp").forward(request, response);} else {response.sendRedirect("login1.jsp");}}
}

过滤器 

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;@WebFilter("/*")
public class loginfilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {// 过滤器初始化}public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) servletRequest;HttpServletResponse response = (HttpServletResponse) servletResponse;String path = request.getRequestURI().substring(request.getContextPath().length());HttpSession session = request.getSession(false);// 如果请求的是登录页面或者正在进行登录操作,则允许访问if (path.equals("/login1.jsp") || path.equals("/LoginServlet2")) {filterChain.doFilter(request, response);return;}// 检查用户是否已经登录if (session == null || session.getAttribute("username") == null) {// 用户未登录,重定向到登录页面response.sendRedirect(request.getContextPath() + "/login1.jsp");}else {// 用户已登录,允许访问其他页面filterChain.doFilter(request, response);}}public void destroy() {// 过滤器销毁}
}

 

实验心得 

滤到点设计思路就好了。 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/692041.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 身份认证漏洞 CVE-2012-2122

漏洞影响版本 MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.演示 开启靶场 进入漏洞目录 cd /root/vulhub/mysql/CVE-2012-2122开启漏洞靶场 docker-compose up -d攻击 直接 运行 这个命令 for i i…

【动态规划】简单多状态dp问题

1.按摩师 按摩师 思路&#xff1a; class Solution { public:int massage(vector<int>& nums) {//创建dp表//初始化//填表//返回值int n nums.size();if(n 0) return 0;vector<int> f(n);auto g f;f[0] nums[0];for(int i 1; i < n; i){f[i] g[i - 1…

地图涟漪效果

参考API echarts图表集 useEcharts.js import { onBeforeUnmount, onDeactivated } from "vue"; // import * as echarts from "echarts";/*** description 使用 Echarts (只是为了添加图表响应式)* param {Element} myChart Echarts实例 (必传)* param …

【C语言 | 字符串处理】sscanf 详细介绍、使用说明以及使用例子源码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-05-08 1…

虚拟机CentOS密码重置

1&#xff0c;reboot重启 在出现下面的界面1按e 如果有选项就选择“CentOS Linux &#xff08;3.10.0-327.e17.x86_64&#xff09;7 &#xff08;Core&#xff09;”【我的电脑没有直接显示界面2】 界面1 界面2 2&#xff0c;在上述界面2中继续按e进入编辑模式 找到“ro cr…

Ubuntu20.4部署Cuda12.4

准备Ubuntu20.4 VM 安装Cuda12.4 1.进入如下界面安装安装Cuda12.4版本&#xff1a; CUDA Toolkit 12.4 Update 1 Downloads | NVIDIA Developerhttps://developer.nvidia.com/cuda-downloads?target_osLinux&target_archx86_64&DistributionUbuntu&target_vers…

【谷粒商城】03创建商品模块

1.创建模块 2.创建项目微服务 商品服务、仓储服务、订单服务、优惠券服务、用户服务 共同&#xff1a; 1&#xff09;、web、openfeign 2&#xff09;、每一个服务&#xff0c;包名 com.atguigu.gulimall.xxx(product/order/ware/coupon/member) 3&#xff09;、模块名&#x…

关于 IIS 开启匿名访问网站仍要账号密码登录网站的解决方法

欢迎关注公总号【云边小网安】 问题提出&#xff1a;发现虽然勾选了允许匿名访问网站&#xff0c;但在访问某一网站的时候仍然需要登录账号密码 解决方法一&#xff1a;登录管理员账号密码解决方法二&#xff1a;添加访问网站文件夹的用户 访问某一网站本质上来讲&#xff0…

【NVIDIA Jetpack6.0】Jetson AGX Orin内核、设备树更新指南

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

【Linux-IMX6ULL-DDR3简介测试-RGBLCD控制原理】

目录 1. DDR3 简介1.1 前要基本概念RAM & ROM 2. DDR3测试及初始化3. RGBLCD简介及控制原理3.1 RGBLCD简介3.2.1 RGB LCD时序3.2.2 像素时钟&#xff08;800*400分辨率&#xff09;3.2.2 显存&#xff08;800*400分辨率&#xff09; 3.3 RGBLCD的控制3.3.1 DOTCLK 硬件接口…

关于Hash表,你不得不知道的知识点

定义&#xff1a; 哈希表是根据关键码值(Key value)而直接进行访问的数据结构。也就是说&#xff0c;它通过把关键码值映射到表中一个位置来访问记录&#xff0c;以加快查找的速度。这个映射函数叫做散列函数&#xff0c;也称为hash函数&#xff0c;存放记录的数组叫做散列表。…

按键的短按、长按和连续的划分

在实际生活中&#xff0c;我们使用到的按键在短按、长按和按键松开时都会触发不同的功能。按键短按后松开和长按后松开的应用比短按和长按的应用较少&#xff0c;我了解的按键短按后松开和长按后松开的应用是在点动控制和长动控制中。这里主要讨论按键的短按、长按和连续这三种…