AOP拦截器使用步骤记录
- 写一个普通类MyInterceptor implements HandlerInterceptor(实现spring的拦截器接口)
- 实现接口的所有方法
- preHandle(相当于前置拦截器:指定需要拦截的方法执行之前 ,需要执行哪些处理)
- afterCompletion(相当于后置拦截器:指定需要拦截的方法执行完成之后 ,需要执行哪些处理)
- postHandle(提交过程中要处理的事情)
- SpringMVC.xml中配置拦截器
<!-- 拦截器的配置 -->
<mvc:interceptors>
<bean class="org.kuwei.interceptor.MyInterceptor">
<!-- 声明需要不拦截的方法的URI
或者也可以声明需要拦截的URI,根据MyInterceptor 拦截器里面的内容进行随需要修改
-->
<property name="notIncludeURIS">
<list>
<value>/ssm-nurse-hobby/nurse/login.cc</value>
<value>/ssm-nurse-hobby/nurse/toLogin.cc</value>
</list>
</property>
</bean>
</mvc:interceptors>
- 在自定义拦截器中进行处理
import org.springframework.web.servlet.HandlerInterceptor;
public class MyInterceptor implements HandlerInterceptor {
//必须提供set方法,否则不能获取配置文件中的信息
// 自动读取springmvc配置文件中配置的不需要拦截的方法 <property name="notIncludeURIS">
List<String> notIncludeURIS;
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
boolean f = false;
// 获取session中的对象(登录成功会在session作用域放一个当前登录的对象)
Nurse nurse = (Nurse) request.getSession().getAttribute("nurse2");
// 获取当前访问 触发的URI路径
String requestURI = request.getRequestURI();
// 当前的请求路径 与 不需要拦截的URI集合 进行比较 判断是否包含
if (notIncludeURIS.contains(requestURI)) { // 不需要拦截
f = true;
} else {
if (nurse != null) { // 已登录,不需要拦截
f = true;
} else { // 需要拦截
f = false;
//放置提示信息
request.getSession().setAttribute("login_msg", "非法访问!请先登录");
// 转发到登录页面
request.getRequestDispatcher("/WEB-INF/view/login.jsp").forward(request, response);
}
}
return f;
}
/**
* 功能:getters and setters
*
* @kuwei 2017年4月28日下午2:51:13
*/
public List<String> getNotIncludeURIS() {
return notIncludeURIS;
}
public void setNotIncludeURIS(List<String> notIncludeURIS) {
this.notIncludeURIS = notIncludeURIS;
}
}
- 其他页面
@RequestMapping("/nurse")
@Controller
public class NurseController {
@Resource(name = "nurseService")
private NurseService nurseService;
@RequestMapping("/list.cc")
public String list(HttpServletRequest request, Nurse nurse) {
List<Nurse> list = nurseService.getList();
request.setAttribute("list", list);
return "nurse_list";
}
@RequestMapping("/login.cc")
public String login(HttpServletRequest request, Nurse nurse) {
Nurse nurse2 = nurseService.findNurseByNurse(nurse);
HttpSession session = request.getSession();
if (nurse2 != null) {
session.setAttribute("nurse2", nurse2);
return "redirect:list.cc";
} else {
request.setAttribute("login_msg", "账号或密码错误,请重新登录");
return "login";
}
}
@RequestMapping("/toLogin.cc")
public String toLogin() {
return "login";
}
/**
* 功能:getters and setters
* @kuwei 2017年4月28日下午4:47:17
*/
public NurseService getNurseService() {
return nurseService;
}
public void setNurseService(NurseService nurseService) {
this.nurseService = nurseService;
}
}
很多知识点长时间不用会遗忘,博客是个很好的记录工具