JSP+Servlet培训班作业管理系统[22]–番外篇之过滤器与权限管理

简介: 本文目录1. 本章任务2. 开发过滤器类3. 过滤器拦截4. 过滤器通过5. 权限管理的实现

1. 本章任务

本篇主要讲述使用过滤器实现简单的权限管理功能。


首先说下什么是过滤器呢,其实就是在网页请求和Servlet之间添加了一个过滤网。通过设定一些规则,符合规则的请求呢就通过了过滤器,到达了Servlet;那不符合规则的请求呢,过滤器就拦截下来,不让它继续访问了。


感觉挺高级啊,那么是如何实现的呢,其实很简单哦,跟Servlet差不多。Servlet通过继承HttpServlet具备了处理Http请求的功能,而过滤器呢,通过实现Filter接口,具备了成为一个合格过滤器的证书。然后,Servlet通过web.xml定义了它响应什么样的请求(比如/ActionServlet),而过滤器也是通过web.xml定义了它要过滤什么样的请求。


哎,怎么说来说去,感觉过滤器和Servlet好像啊。哈哈,让我们来看看Filter接口的户口吧:javax.servlet.Filter。而Servlet户口为:javax.servlet.http.HttpServlet,好像可以说,他俩是叔侄关系啊。怪不得、怪不得。


2. 开发过滤器类

好的,现在我们来在作业管理系统实现下过滤器,首先在org.maoge.servlet包下新建SessionFilter类(主要是针对Session进行过滤,保证没登录的用户无法访问网站功能),然后实现Filter接口,并实现接口规范的方法。

@WebFilter(filterName = "SessionFilter", urlPatterns = "/*")
public class SessionFilter implements Filter{
  @Override
  public void destroy() {
  }
  /**
   * 核心过滤方法
   */
  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    System.out.println("SessionFilter.doFilter");//用于测试
  }
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
  }
}

OK,注意@WebFilter注解表明这是一个过滤器,意思应该挺明显了:有个叫SessionFilter的过滤器,过滤规则是/*,也就是说只要请求里面有/,不管/后面是啥,这个过滤器都会过滤。


3. 过滤器拦截

好的,我们已经配置了过滤器,重启TOM猫后访问登录页,有两大现象值得注意:


1,控制台输出了SessionFilter.doFilter,这个现象说明我们的请求被拦截了。为啥被拦截呢,我们的请求是:http://127.1.1.1:8080/HomeworkSystem/login.jsp,有/吗?有,所以拦截没商量。不信你就是访问http://127.1.1.1:8080/HomeworkSystem/照样拦截你,当然你访问http://127.1.1.1:8080/Homework/肯定不拦截你,因为都不是一个项目了哈哈。

2,控制台输出SessionFilter.doFilter后网页一片空白,为啥?因为拦住了,那么怎么放行呢,如下:


4. 过滤器通过

public void doFilter(ServletRequest request, ServletResponse response,
      FilterChain chain) throws IOException, ServletException {
    System.out.println("SessionFilter.doFilter");//用于测试
    chain.doFilter(request, response);
  }

在doFilter过滤方法中添加chain.doFilter(request, response);,这个语句可以理解为过滤器网啊,放过了一个请求,完事。

5. 权限管理的实现

好的,如此以来,我们可以如此设计doFilter方法以便拦截不合法的请求了:

@WebFilter(filterName = "SessionFilter", urlPatterns = "/*")
public class SessionFilter implements Filter {
  @Override
  public void destroy() {
  }
  /**
   * 核心过滤方法
   */
  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException {
    // 获取代表用户请求、响应、会话的对象
    HttpServletRequest servletRequest = (HttpServletRequest) request;
    HttpServletResponse servletResponse = (HttpServletResponse) response;
    HttpSession servletSession = servletRequest.getSession();
    // 获得用户请求的URI
    String path = servletRequest.getRequestURI();
    // 允许访问login.jsp和tip.jsp以及LoginServlet
    if ((path.indexOf("/login.jsp") > -1) || (path.indexOf("/tip.jsp") > -1)
        || (path.indexOf("/LoginServlet") > -1)) {
      chain.doFilter(request, response);
      return;
    }
    // 允许访问css文件和图片文件(如果不允许,那就看不到样式和图片了)
    else if (path.contains(".css") || path.contains(".jpg") || path.contains(".gif") || path.contains(".png")) {
      chain.doFilter(request, response);
      return;
    }
    // 允许访问js文件,注意不允许访问jsp文件!
    else if (path.contains(".js") && (!path.contains("jsp"))) {
      chain.doFilter(request, response);
      return;
    }
    // 除上述允许访问的之外,如果未登录报无权限错误
    if (((HttpServletRequest) request).getSession().getAttribute("loginUser") == null) {
      servletRequest.setAttribute("tipInfo", "无权限!");
      request.getRequestDispatcher("/tip.jsp").forward(request, response);
      return;
    }
    // 如果已登录,则允许访问
    else {
      chain.doFilter(request, response);
      return;
    }
  }
  @Override
  public void init(FilterConfig filterConfig) throws ServletException {
  }
}

意思就是,如果登录了,让你访问好了,如果没登录,就要限制你的访问。



//

相关文章
|
3月前
|
JavaScript Java 容器
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
本文简要回顾了Servlet过滤器Filter的概念和使用,通过实例演示了如何创建过滤器以过滤请求字符编码,并解释了在web.xml中配置过滤器时使用`/`、`/*`和`/**`的区别。
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
|
3月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
4月前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
46 3
|
4月前
|
存储 缓存 前端开发
Servlet与JSP在Java Web应用中的性能调优策略
Servlet与JSP在Java Web应用中的性能调优策略
45 1
|
4月前
|
安全 Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+jsp实现的健身房管理系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术实现的健身房管理系统。随着健康生活观念的普及,健身房成为日常锻炼的重要场所,高效管理会员信息、课程安排等变得尤为重要。该系统旨在通过简洁的操作界面帮助管理者轻松处理日常运营挑战。技术栈包括:JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Shiro、Spring Boot 2.0等。系统功能覆盖登录、会员管理(如会员列表、充值管理)、教练管理、课程管理、器材管理、物品遗失管理、商品管理及信息统计等多方面。
|
4月前
|
存储 前端开发 Java
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
该文章展示了如何使用Servlet过滤器(Filter)通过注解方式创建一个网站访问人数统计功能,通过`@WebFilter`注解定义过滤器及其URL模式,并在`doFilter`方法中实现计数逻辑,将访问次数存储在`ServletContext`中,最后在JSP页面展示访问人数。
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
|
4月前
|
供应链 前端开发 Java
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
这篇文章通过一个服装库存管理系统的实例,展示了在Spring Boot项目中使用Ajax、JSON、layui、MVC架构和iframe等技术,涵盖了注册登录、权限管理、用户管理、库存管理等功能,并提供了系统运行环境和技术要求的详细说明。
JSP+servlet+mybatis+layui服装库存管理系统(大三上学期课程设计)
|
4月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
252 0
|
4月前
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
基于Servlet和JSP的Java Web应用开发指南
89 0
|
4月前
|
前端开发 安全 Java
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
在Java服务器端开发的浩瀚宇宙中,Servlet与JSP犹如两颗璀璨的明星,它们联袂登场,共同编织出动态网站的绚丽篇章。
32 0