在实际开发中,我们的程序都是需要用户登录之后才能进入程序进行相关操作,为了避免用户在未登录的情况下直接通过输入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("过滤器初始化");
}
}