Springmvc开发中使用filter过滤器来防止未登录的情况下通过url直接访问请求页面

本文详细介绍如何在SpringMVC项目中实现用户请求过滤,防止未登录用户直接访问受保护页面。通过配置web.xml和实现Filter接口,设置特定URL模式进行过滤,并列举了具体代码示例。

在实际开发中,我们的程序都是需要用户登录之后才能进入程序进行相关操作,为了避免用户在未登录的情况下直接通过输入url进入我们的主功能页面,那么我们就要对用户的所有请求进行有一个过滤操作,下面是我在springmvc开发中使用的过滤请求方式的代码以及详细注释:

(整理不易,参考使用,记得点赞)

1.首先配置web.xml,里面的地址是我们要用来过滤的LoginFilter.java文件的访问地址,中使用 /* 来过滤用户的所有请求

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

2.接下来是配置我们映射文件LoginFilter.java,在这个文件里一定要实现Filter这个接口,我们才能实现过滤操作,注意上面对应的包不要导错,接下来几部就是过滤请求的操作:

2.1在doFilter这个方法里先添加请求响应的中文编码格式

2.2可以先创建一个集合,将我们不需要过滤的几个请求,比如说访问登录页面,注册页面等等我们都需要过滤,就把它们添加到集合里

2.3使用request.getServletPath()这个方法得到客户端发来的请求,然后循环刚才的集合,如果发现不是我们要过滤的请求就使用chain.doFilter(request, response)来放行

2.4我们在登录成功后会把我们登录的用户对象添加到session中,我们这里再接收一下session对象进行判断,如果session中没有用户对象,说明没有登录就直接跳转到登录页面,如果有说明已经登录成功,就不需要过滤用户的请求了

2.5这样就完成了我们对所有请求的一个过滤,这样就可以防止用户在未登录的状态下直接通过url发送请求了

package com.filter;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginFilter implements Filter{

	@Override
	public void destroy() {
		System.out.println("过滤器销毁");
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;
		request.setCharacterEncoding("utf-8");
		HttpServletResponse response = (HttpServletResponse) resp;
		response.setContentType("text/html;charset=utf-8");
		List<String> list= new ArrayList<String>(); //将不需要过滤的请求存放到集合中
		list.add("/tologin");//跳转至登录页面请求
		list.add("/login");//登录页面
		list.add("/isname");//是否存在用户名请求
		list.add("/toregister");//跳转到注册页面请求
		list.add("/register");//注册页面
		String path = request.getServletPath();//得到请求的url
		//循环集合把不需要过滤的请求放行
		for(String l : list){
			if(path.endsWith(l)){
				chain.doFilter(request, response);
				return;
			}
		}
		//查看session是否存在对象,有对象的话也不需要过滤
		Object user =  request.getSession().getAttribute("user");
		if(user==null){
			//session没有对象就跳转到登录页面
			response.sendRedirect("/tologin");
		}else{
			chain.doFilter(request, response);
		}
	}
	
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		System.out.println("过滤器初始化");
	}

}
Spring MVC 环境下注册过滤器有以下两种常见方法: ### 通过 Java 配置注册过滤器 创建自定义过滤器类,实现 `javax.servlet.Filter` 接口,重写 `doFilter` 方法进行具体的过滤逻辑处理。以下是一个简单的自定义过滤器示例: ```java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; // 使用 @WebFilter 注解,可配置过滤器名称和过滤路径 @WebFilter(filterName = "myFilter", urlPatterns = "/*") public class MyFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 执行过滤逻辑,例如设置字符编码 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); // 继续处理请求 chain.doFilter(request, response); } @Override public void init(FilterConfig filterConfig) throws ServletException { // 过滤器初始化逻辑 } @Override public void destroy() { // 过滤器销毁逻辑 } } ``` 在 Java 配置类中注册过滤器,可通过 `FilterRegistrationBean` 来注册自定义过滤器。示例如下: ```java import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FilterConfig { @Bean public FilterRegistrationBean<MyFilter> myFilterRegistration() { FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new MyFilter()); // 设置过滤路径 registration.addUrlPatterns("/*"); // 设置过滤器名称 registration.setName("myFilter"); // 设置过滤器顺序 registration.setOrder(1); return registration; } } ``` ### 通过 `web.xml` 配置注册过滤器 在传统的基于 `web.xml` 的 Spring MVC 项目中,可以在 `web.xml` 文件中注册过滤器。示例如下: ```xml <filter> <filter-name>myFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值