最近在做一个管理系统,要求是首页是登陆界面 ,
我的DispatcherServlet servlet 是过滤所有的请求
<!-- Map all requests to the DispatcherServlet for handling -->
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
@RequestMapping(value = {"","/","index.html"})
public String index() {
return "index";
}
在首页的登陆界面中,form 表单的地址是 "/login"
以上是我的项目的背景,
下面是正式的登陆代码实现
我们对全局的拦截登陆
public class GlobalLoginInterceptor implements HandlerInterceptor {
pblic boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String requesturi = request.getRequestURI();
String contextPath = request.getContextPath();
String url = requesturi.substring(contextPath.length());
//当所访问的地址是首页,或者是 登陆表彰的form acion 路径时,我们不对他进行拦截
if(url.endsWith("/")||url.endsWith("index.html")||url.endsWith("login")){
return true;
}
User attribute = (User) request.getSession().getAttribute(
"user");
// 判断是否有Session ,如果不存在,则跳转到登陆页面
if (attribute == null) {
response.sendRedirect(contextPath+"/index.html");
// request.getRequestDispatcher("/").forward(request,
// response);
return true;
}
return true;
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
以上是我主要的拦截核心代码,如有不正确的,可能给我留言,谢谢。