1.创建Bean
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/manage/**"/>
<!--<mvc:exclude-mapping path="/manage/user/login.do"/>-->
<bean class="com.easygou.controller.common.interceptor.AuthorityInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
path: 你要拦截那个文件夹下面的类
class: 你要实现的拦截器的类。我这里命名:AuthorityInterceptor 它继承至 HandlerInterceptor
2.获取捕获的类和方法:
HandlerMethod handlerMethod = (HandlerMethod) handler;
String methodName = handlerMethod.getMethod().getName();
String className = handlerMethod.getBean().getClass().getSimpleName();
如下图所示:
3. 获取前端传过来的 session.
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("preHandle");
HttpSession session = request.getSession();
User user = (User) session.getAttribute(Constants.CURRENT_USER);
然后根据获取的值进行判断:
if (user == null || user.getRole().intValue() != Const.Role.ROLE_ADMIN){
//返回一个响应对象
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
PrintWriter out = response.getWriter(); //输入流
if (user == null){
out.print(JsonUtil.obj2String(ServerResponse.createByErrorMessage("拦截器拦截,用户未登录")));
}else {
Map resultMap = Maps.newHashMap();
resultMap.put("success",false);
resultMap.put("msg","请登录管理员");
out.print(JsonUtil.obj2String(resultMap));
}
out.flush();
out.close();
return false;
}
解决登录死循环问题(在头部加上这个):
if (StringUtils.equals(methodName,"login") && StringUtils.equals(className,"UserManageController")){
return true;
}