【Web】filter过滤器

本文介绍如何在暑期项目实习中使用filter过滤器来实现登录验证功能,确保只有登录后的用户才能访问特定功能。详细讲解了web.xml的配置以及LoginFilter的设置,实现了未登录用户被重定向至主页的效果,而登录用户则可以正常查看数据。
摘要由CSDN通过智能技术生成

前言

暑期项目实习第八课,用filter过滤器实现登陆验证功能,让功能只有在登陆后才能使用。

Code

该篇为【Web】ssm注册修改查询实现的衍生篇,其余详细代码部分查阅上篇详解。
项目目录

webapp中的web.xml

首先编写配置文件让程序能够识别到我们写的Filter过滤器。

  <filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.zr0701.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>

完整文件,代码上方出现的Filter过滤器为原有的中文过滤器,防止出现中文报错问题。我们本次添加的Filter在下方。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <!-- 配置加载类路径的配置文件 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext.xml</param-value>
  </context-param>

  <!-- 配置监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>

  <!-- 解决中文乱码过滤器 -->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 前端控制器(加载classpath:spring-mvc.xml 服务器启动创建servlet) -->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置初始化参数,创建完DispatcherServlet对象,加载springmvc.xml配置文件 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <!-- 服务器启动的时候,让DispatcherServlet对象创建 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <filter>
    <filter-name>loginFilter</filter-name>
    <filter-class>com.zr0701.filter.LoginFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>loginFilter</filter-name>
    <url-pattern>*.do</url-pattern>
  </filter-mapping>
</web-app>

filter下的LoginFilter

package com.zr0701.filter;

import com.zr0701.bean.User;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {   //初始化

    }

    @Override //添加过滤规则
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");

        String uri = request.getRequestURI(); //获得请求路径(除去host(域名或者IP)部分路径) 8080端口号后面部分
//        String uri = .getRequestURL();返回全路径
        System.out.println(uri.indexOf("findAll.do"));
        System.out.println(uri.indexOf("login.do"));
        if(user == null && uri.indexOf("login.do")==-1) {
            response.sendRedirect(request.getContextPath() + "/");
        }else {
            filterChain.doFilter(request,response);  //链状过滤 此中只有一层Filter过滤器
        }
    }

    @Override //清除Filter
    public void destroy() {

    }
}

最终效果

尚未登陆,点击查看数据,会发现无法查看且一直跳回主页。
查看数据
当登陆后再去点击查看数据时,便可以正常查看了。
正常查看数据
注:此时网页会记录登陆数据,当清理cookie等数据后,便需再次登陆。
清理数据

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值