项目中有需求,针对servlet请求,需要进行过滤。由于和手机对接,他们没有按照浏览器那种方式发送sessionid,而是把sessionid放到请求参数中了所以后端需要新建一个过滤器,针对这些请求,使用map存储sessionid,和请求的时间,然后计算是否过期,过期需要把map中的清除。
为了解决一些死链接,即请求一次,以后再也不来了,这样就不会移除,所以需要加一个计数器,超过1000次后,全部循环,看下是否有一些死链接。
实现Servlet.Filter接口
public class AdminLoginFilter implements Filter
新建一个实现filter接口的类,实现dofilter方法,在dofilter方法里面写一个判读,比如如果用户名密码为空,则返回到登录页面
public class TestFilter implements Filter {
public void doFilter(ServletRequest srt, ServletResponse sre,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)srt;
HttpServletResponse response = (HttpServletResponse)sre;
String name= (String)request.getSession().getAttribute("name");
if( name== null || name.trim().length() < 1) {
response.sendRedirect( "/denglu.jsp" );
}else {
filterChain.doFilter(request, response);
}
}
web.xml配置过滤器
<filter>
<filter-name>TestFilter </filter-name>
<filter-class>/test/TestFilter </filter-class>
</filter>
配置多个映射,哪些请求执行过滤器
<filter-mapping>
<filter-name>TestFilter </filter-name>
<url-pattern>/web-inf/test/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>TestFilter </filter-name>
<url-pattern>/login.do</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>TestFilter </filter-name>
<url-pattern>/loginin.do</url-pattern>
</filter-mapping>