SpringMVC—拦截器
- 拦截器配置
- 第一个拦截器
- 练习
拦截器的配置
<!-- 拦截器配置-->
<mvc:interceptors>
<!-- 第一个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/> <!--拦截位置/**代表所有-->
<bean class="Mr_xiao.interceptor.HelloInterceptor" /><!--拦截器的位置-->
</mvc:interceptor>
</mvc:interceptors>
第一个拦截器
HelloInterceptor.java 继承接口HanderInterceptor重写三个方法
/**
* 第一个拦截器
* 拦截位置在哪?
* 怎么放行or不放行?
*/
public class HelloInterceptor implements HandlerInterceptor {
//拦截前执行 返回true继续执行,返回false终止执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截前运行"+handler);
return true;
}
//此方法可以进一步更改视图模型(拦截进行中)
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截进行中"+handler);
// modelAndView.addObject("lol","edg WINNER");
// modelAndView.setViewName("404Error");
}
//视图渲染结束后执行(拦截后执行)
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("拦截后运行"+handler);
}
}
练习
Login控制器 session LOGIN=admin
Game控制器 “你正在玩英雄联盟”
拦截器 检查LOGIN有没有?? 有—》放行 没----》login.jsp
创建登陆拦截器loginInterceptor
public class LoginInterceptor implements HandlerInterceptor {
//拦截前执行 返回true继续执行,返回false终止执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object uname=request.getSession().getAttribute("login");
System.out.println("uname="+uname);
if(uname==null||uname.equals("")){
response.sendRedirect("login.jsp");
return false;
}else {
return true;
}
}
//此方法可以进一步更改视图模型(拦截进行中)
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("我要去打游戏咯~");
}
}
login.jsp
<form action="login" method="post">
用户名:<input type="text" name="uname" required><br/>
密码:<input type="password" name="upwd">
<input type="submit" value="Login">
</form>
<h2><a href="clearlogin">退出登陆</a> </h2>
<h2><a href="begingame">开始游戏</a> </h2>
实现类
@Controller
@SessionAttributes({"login"})
public class LoginController {
@RequestMapping("/login")
public String login(String uname, String upwd, ModelMap map){
System.out.println("用户名:"+uname);
System.out.println("密码:"+upwd);
map.put("login","admin");
return "success"; //登陆成功自己控制跳转到哪
}
@RequestMapping("/begingame")
public String begingame(){
System.out.println("开启我的游戏之旅....");
return "success";
}
@RequestMapping("/clearlogin")
public String clearlogin(SessionStatus ss){
System.out.println("退出登录....");
ss.setComplete();
return "redirect:login.jsp";
}
}
最终测试结果看控制台信息即可
还有不要忘了配置拦截器
<mvc:interceptors>
<!-- 登陆拦截器-->
<mvc:interceptor>
<mvc:mapping path="/begingame"/>
<bean class="Mr_xiao.interceptor.LoginInterceptor" />
</mvc:interceptor>
</mvc:interceptors>