Springmvc开发中使用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("过滤器初始化");
	}

}
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值