拦截器:只会拦截springmvc的控制层接口路径
自定义拦截器类
返回 true为通过 fales 为拦截
public class Myinterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("-=======拦截器======-");
return true;
}
}
将拦截器放到springMvc容器中 springmvc.xml
<!--拦截器-->
<mvc:interceptors>
<mvc:interceptor>
//拦截的路径 /*一层路径
/**多层路径
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="不拦截路径"/>
<bean class="拦截器全路径"/>
</mvc:interceptor>
</mvc:interceptors>
案例:
不登录能访问student/list 不能访问student/a,student/b
登录后能访问student/a,student/b
@Controller
@RequestMapping("/student")
public class Hellocontroller {
@RequestMapping("/a")
@ResponseBody
public String a(){
return "登录后才能访问a";
}
@RequestMapping("/b")
@ResponseBody
public String b(){
return "登录后才能访问b";
}
@RequestMapping("/list")
@ResponseBody
public String list(){
return "不登录也能访问list";
}
}
login.jsp 登录页面
登录页面的控制层
@Controller
@RequestMapping("/login")
public class Logincontroller {
@RequestMapping("/login")
public String login(String name, String password, HttpSession session){
if ("admin".equals(name)&&"123".equals(password)){
session.setAttribute("name",name);
return "error";
}else {
return "forward:../login.jsp";
}
}
}
拦截器
public class Loginhandle implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
Object name = session.getAttribute("name");
if (name!=null){
return true;
}else
response.sendRedirect(request.getContextPath()+"/login.jsp");
return false;
}
}
声明拦截器
<!--声明自定义拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/student/list"/>
<mvc:exclude-mapping path="/login/login"/>
<bean class="com.rqk.aaa.qy145.ninth.rqk.handler.Loginhandle"/>
</mvc:interceptor>
</mvc:interceptors>