当前位置: 首页 > news >正文

JavaWeb学习打卡17(监听器使用、Filter过滤器实现权限拦截案例)

监听器在 GUI (图形界面)编程中的使用案例(窗体和面板):

package com.xu.listener;import java.awt.*;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;public class TestPanel {public static void main(String[] args) {Frame frame = new Frame("你好,世界!");//新建一个窗体Panel panel = new Panel(null);//新建一个面板frame.setLayout(null);//设置窗体的一个布局frame.setBounds(400,400,500,500);//将窗体的位置设置为 400,400;宽高设置为:500,500frame.setBackground(new Color(0,200,233));//设置背景颜色panel.setBounds(50,50,300,300);//将面板的位置设置为 50,50;宽高设置为:300,300panel.setBackground(new Color(30,233,90));//设置背景颜色frame.add(panel);//将面板加入窗体中frame.setVisible(true);//将窗体显示出来//监听关闭事件frame.addWindowListener(new WindowListener() {@Overridepublic void windowOpened(WindowEvent e) {System.out.println("打开了");}@Overridepublic void windowClosing(WindowEvent e) {System.out.println("关闭ing");System.exit(0);//0(正常退出)和1(非正常退出)}@Overridepublic void windowClosed(WindowEvent e) {System.out.println("关闭ed");}@Overridepublic void windowIconified(WindowEvent e) {System.out.println("打开了");}@Overridepublic void windowDeiconified(WindowEvent e) {}@Overridepublic void windowActivated(WindowEvent e) {System.out.println("激活");}@Overridepublic void windowDeactivated(WindowEvent e) {System.out.println("未激活");}});}
}

Filter 过滤器实现权限拦截:

首先我们先写好我们所需要的 所有页面效果的  jsp 文件:

    Login.jsp :

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h1>登录</h1>
<form action="/servlet/login" method="post"><input type="text" name="username"><input type="submit">
</form></body>
</html>

error .jsp :

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>错误</h1>
<h3>没有权限,用户名错误</h3><a href="Login.jsp">返回登录页面</a></body>
</html>

在web 目录下新建一个 sys 目录,在里面新建 success.jsp :

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h1>主页</h1><p><a href="/servlet/logout">注销</a></p></body>
</html>

然后新建一个 LoginServlet(登录) 类:

package com.xu.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class LoginServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取请求的参数String username = req.getParameter("username");if (username.equals("admin")){//登录成功req.getSession().setAttribute("USER_SESSION",req.getSession().getId());resp.sendRedirect("/sys/success.jsp");//重定向到success.jsp页面}else {//登录失败resp.sendRedirect("/error.jsp");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

再新建一个 LogoutServlet(注销) 类:

package com.xu.servlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class LogoutServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Object userSession = req.getSession().getAttribute("USER_SESSION");//如果得到的session 中能够获取到 USER_SESSION ,就将 USER_SESSION 元素移除,并重定向到登录页面if (userSession!=null){req.getSession().removeAttribute("USER_SESSION");resp.sendRedirect("/Login.jsp");}else {//等于空的时候,也回到登录页面resp.sendRedirect("/Login.jsp");}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

再创建一个 SysFilter 类,来实现 Filter 过滤器接口,以及重写里面的所有方法

package com.xu.filter;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class SysFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {Filter.super.init(filterConfig);}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain Chain) throws IOException, ServletException {//我们要将servletRequest(子类),servletResponse 转化为 HttpServletRequest(父类),HttpServletResponse,才能拿到sessionHttpServletRequest request = (HttpServletRequest) req;HttpServletResponse response = (HttpServletResponse) resp;//如果 得到的这个 session 为空,说明该session 已经注销了,页面就返回error.jsp 错误页面if ((request.getSession().getAttribute("USER_SESSION"))==null){response.sendRedirect("/error.jsp");}Chain.doFilter(request,response);}@Overridepublic void destroy() {Filter.super.destroy();}
}

随后在 web.xml 文件中 ,注册 LoginServlet  、 LogoutServlet  两个类,以及 Filter 过滤器 的注册 :

<!--    注册LoginServlet--><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.xu.servlet.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/servlet/login</url-pattern></servlet-mapping><!--    注册LogoutServlet--><servlet><servlet-name>LogoutServlet</servlet-name><servlet-class>com.xu.servlet.LogoutServlet</servlet-class></servlet><servlet-mapping><servlet-name>LogoutServlet</servlet-name><url-pattern>/servlet/logout</url-pattern></servlet-mapping><!--    注册SysFilter 过滤器 --><filter><filter-name>SysFilter</filter-name><filter-class>com.xu.filter.SysFilter</filter-class></filter><filter-mapping><filter-name>SysFilter</filter-name>
<!--        只要是在/sys 路径下的访问都要经过这个过滤器--><url-pattern>/sys/*</url-pattern></filter-mapping>

运行结果:

若提交的数据为 :admin

若提交的  非  admin,或者   未登录  ,  直接访问 success.jsp

点击注销 、返回登录页面,均返回到 开始的登录页面

http://www.dtcms.com/a/301792.html

相关文章:

  • 网络虚拟化:veth,bridge,network namespace与docker网络
  • JavaScript核心概念全解析
  • 基于CNN图像特征提取流程(简化版)
  • Python训练Day25
  • 深度学习(鱼书)day04--手写数字识别项目实战
  • RK3568 Linux驱动学习——U-Boot使用
  • Docker的docker-compose类比Spring的ApplicationContext
  • Yaffs文件系统学习
  • Mysql数据库基础(入门)
  • 智慧施工:施工流程可视化管理系统
  • 【分享】外国使馆雷电综合防护系统改造方案(一)
  • 自动出题与批改系统(数学题生成+OCR识别)
  • Vue入门到实战之第三篇【超基础】
  • 从 .NET Framework 到 .NET 8:跨平台融合史诗与生态演进全景
  • 数据科学专业的行业适配全景图
  • Unity TAA
  • 大数据工程师:职责与技能全景图 -- 从“数据搬运工”到“价值架构师”
  • 三、构建一个Agent
  • Triton IR
  • 【测试报告】思绪网(Java+Selenium+Jmeter自动化测试)
  • 力扣面试150题--二进制求和
  • 五度标调法调域统计分析工具
  • 【笔记】Einstein关系式 D = ukBT 的推导与应用研究
  • 零拷贝 详述
  • Day4.AndroidAudio初始化
  • Linux学习篇11——Linux软件包管理利器:RPM与YUM详解与实战指南,包含如何配置失效的YUM镜像地址
  • 【RH134 问答题】第 2 章 调度未来任务
  • 第1章 AB实验的基本原理和应用
  • 任务提醒工具怎么选?对比16款热门软件
  • Valgrind Helgrind 工具全解:线程同步的守门人