拦截器
Interceptor中
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//拦截器类
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//在拦截点进行拦截,如果返回true,则不执行拦截点后的操作
//返回false则表示不拦截
HttpSession session=request.getSession();
//1.拦截点:从我们项目发起的url
String url=request.getRequestURI();
//if(session.getAttribute("user")!=null || url.indexOf("user/doLogin.do")!=-1)
if(session.getAttribute("user")!=null)
{
//indexOf ---路径在字符串内出现的下标
//登录成功 不拦截
return true;
}
else
{
//拦截后进入登录界面
response.sendRedirect(request.getContextPath()+"/user/doLogin.do");
return false;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//在处理过程中进行拦截
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//执行完毕,返回前拦截
}
}
spring-mvc中
<!-- 4.配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有的mvc控制器-->
<mvc:mapping path="/**"/>
<!-- exclude-mapping 另一种拦截,他可以对某个请求设置不拦截,
这里添加了不拦截,那么loginInterceptor就可以不进行对url的拦截-->
<mvc:exclude-mapping path="/user/doLogin.do"/>
<!--告诉他用那个拦截器进行拦截-->
<bean class="com.zhongruan.interceptor.LoginInterceptor"></bean> //改成自己的
</mvc:interceptor>
</mvc:interceptors>
过滤器
Filter中
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class loginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//过滤器出生
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//servletRequest是一个接口,HttpServletRequest是一个实现
//但HttpServletRequest有的方法是servletRequest中没有的
HttpServletRequest request=(HttpServletRequest)servletRequest;
HttpServletResponse response=(HttpServletResponse)servletResponse;
HttpSession session=request.getSession();
if(session.getAttribute("user")==null&&request.getRequestURI().indexOf("/user/doLogin.do")!=-1)
{
//当前没有登录
response.sendRedirect(request.getContextPath()+"/user/doLogin.do");
}
else
{
//已经登录,继续下一步操作
filterChain.doFilter(request,response);
}
}
@Override
public void destroy() {
//过滤器死亡
}
}
web.xml中
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>com.zhongruan.filter.loginFilter</filter-class> //改成自己的
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>