Spring-MVC.xml配置
<!-- 拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<!-- /**表示所有url包括子url路径 -->
<mvc:mapping path="/**"/>
<!-- 不拦截登录的请求 -->
<mvc:exclude-mapping path="/loginUser.do"/>
<bean class="com.jk.login.interceptor.LoginHandlerIntercepter"/>
</mvc:interceptor>
<!-- 可以继续写mvc interceptor双标签,执行多个拦截器 -->
</mvc:interceptors>
interceptor类的写法
package com.jk.login.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class LoginHandlerIntercepter implements HandlerInterceptor {
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object arg2, Exception arg3)
throws Exception {
}
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse arg1,
Object arg2) throws Exception {
String requestURI = request.getRequestURI();
//准备跳转前,拦截到请求,先判断session中是否有值,即是用户名密码是否存在的指标
if(requestURI.indexOf("successLogin.do")>0){//requestURI.indexOf("successLogin.do")>0
//mapKey在loginUser方法中已经事先放入session了,这里取出判断,是否为空
//需要注意的是:model.addAttribute放入的数据,在request中get不到
Object attribute = request.getSession().getAttribute("mapKey");
if(attribute!=null){
return true;//非空说明数据库中存在对应帐号
}else{
//没有登陆,转向登陆界面
request.getRequestDispatcher("/login.jsp").forward(request,arg1);
return false;
}
}else{
request.getRequestDispatcher("/login.jsp").forward(request,arg1);
return false;
}
}
}
Controller层中,在登录时,将判断用户名是否存在的结果,放入了session中,在拦截器作用时,会get出session,根据是否有值判断是否拦截。
package com.jk.login.controller;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.jk.login.entity.LoginUser;
import com.jk.login.service.UserLoginService;
@Controller
public class UserLoginController {
@Autowired
private UserLoginService loginService;
//登陆
@RequestMapping("loginUser")
@ResponseBody
public Map<String,Object> loginUser(LoginUser lo,HttpServletRequest request){
Map<String,Object> map = new HashMap<String, Object>();
try {
map = loginService.queryByUserId(lo,request);
//放入session
request.getSession().setAttribute("mapKey", map);
Object attribute = request.getSession().getAttribute("mapKey");
System.err.println(attribute.toString()+"█--------------------");
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}