在java开发中我们用的比较多的是spring框架,spring中有一个接口可以实现请求拦截功能,可以用于防止用户在未登录的情况下通过url进入到我们的功能页面,下面是实现步骤以及代码:
1.创建一个Interceptors类实现HandlerInterceptor这个接口,用里面的方法完成拦截功能的操作,这里面有三个方法,我们通常是在 preHandle 这个方法进行拦截操作,也就是请求之前进行拦截判断,我们可以在这里得到session中的用户这个对象来判断是否有值代表有没有登录,选择拦截下来跳转到登录页面还是选择放行:
package com.interceptors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class Interceptors implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("请求之前拦截");
System.out.println("这里可以接受请求路径:"+arg0.getServletPath());
System.out.println("方法对象:"+arg2);
Object user = arg0.getSession().getAttribute("user");
if(user==null){
arg1.sendRedirect("/tologin");
return false;
}
return true;
}
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {
System.out.println("方法结束之后");
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {
System.out.println("方法调用之后");
}
}
2.除了要写上面的拦截方法外还需要在springmvc.xml中添加这个拦截方法的映射以及不需要过滤的内容,添加下面的标签,mvc:mapping可以过滤所有的请求,如果有不需要过滤的请求比如说打开登录页面,注册页面等,和css样式文件的引用,这些请求就可以使用 mvc:exclude-mapping 标签,就不会被拦截,bean中配置的是拦截方法的文件路径:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/css/**"/>
<mvc:exclude-mapping path="/fonts/**"/>
<mvc:exclude-mapping path="/img/**"/>
<mvc:exclude-mapping path="/js/**"/>
<bean class="con.interceptors.Interceptors"></bean>
</mvc:interceptor>
</mvc:interceptors>