目录
第10章 SpringMVC拦截器实现权限统一验证
10.1 总览
- 一期代码关于权限判定的演进
- SpringMVC拦截流程图
- 拦截器配置与使用
- HttpServletResponse的重置
- 登录不拦截
- 代码重构
10.2 一期代码回顾
一期代码中涉及权限校验的部分:
- 是否登录?
- 是否是管理员?
如下所示。这部分代码大量重复,可以抽取到拦截器的逻辑中。
@RequestMapping("add_category.do")
@ResponseBody
public ServerResponse addCategory(HttpSession session,String categoryName,@RequestParam(value = "parentId",defaultValue = "0") int parentId){
User user = (User)session.getAttribute(Const.CURRENT_USER);
if(user == null){
return ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),"用户未登录,请登录");
}
//校验一下是否是管理员
if(iUserService.checkAdminRole(user).isSuccess()){
//是管理员
//增加我们处理分类的逻辑
return iCategoryService.addCategory(categoryName,parentId);
}else{
return ServerResponse.createByErrorMessage("无权限操作,需要管理员权限");
}
}
10.3 拦截器的配置
注意,这里的path格式代表拦截的范围不同。
因为登录不需要拦截,因为它确实需要进行登录逻辑,否则会陷入死循环(想要登录,却被拦截提示请登录)。
可以在配置文件中去掉对登录的拦截,也可以在代码里去掉对登录的拦截,这里采用后者,效果一样。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframewor