您的位置:首页 > 编程语言 > Java开发

11. SpringMVC 拦截器

2016-03-09 20:37 645 查看
本系列入门学习参考极客学院Spring入门系列视频学习记录总结而来

index.jsp 页面包含一个登陆引导链接和一个直接访问用户中心的测试链接

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
<div style="margin:0 auto; padding-top: 100px; font-size: 18px;" align="center">
<p><a href="loginpage.html"> 登录  </a></p>
<p><a href="user/home.html"> 用户中心  </a></p>
</div>
</body>
</html>


LoginController:

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.dragon.springmvc.constant.Global;
import com.dragon.springmvc.model.User;
import com.dragon.springmvc.service.LoginService;

@Controller
public class LoginController {

@Resource
LoginService service;

@Resource
HttpServletRequest request;

@RequestMapping("/loginpage")
public String toLoginPage(){
return "/WEB-INF/jsp/login.jsp";
}

@RequestMapping("/user/home")
public String toUserHome(){
return "/WEB-INF/jsp/userhome.jsp";
}

@RequestMapping(value = "/doLogin", method = RequestMethod.POST)
public String doLogin(@RequestParam String userName, @RequestParam String password){

try {
User user = service.doLogin(userName, password);
request.getSession().setAttribute(Global.USER_SESSION_KEY, user);
return "redirect:/user/home.html";
} catch (Exception e) {
System.out.println(e.getMessage());
return "/WEB-INF/jsp/login.jsp";
}

}

}


其他的就省略了,和前几篇例子没什么大的差别,

主要看如何定义拦截器以及使用拦截器:

定义拦截器:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.dragon.springmvc.constant.Global;

public class LoginInterceptor implements HandlerInterceptor {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object user = request.getSession().getAttribute(Global.USER_SESSION_KEY);
if (user == null) {
System.out.println("尚未登录,调到登录页面");
response.sendRedirect("/springmvc/loginpage.html");
return false;
}

return true;
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion");
}

}


springmvc.xml中配置使用拦截器:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> 
<!-- 自动扫描 com.dragon 包下面的所有组件(使用了springmvc注解) -->
<context:component-scan base-package="com.dragon" />

<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截所有URL中包含/user/的请求 -->
<mvc:mapping path="/user/**"/>
<bean class="com.dragon.springmvc.interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
</beans>


此时若在index.jsp页面,想直接进入用户中心页面则将被拦截跳转至登陆页面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: