package com.itheima.interceptor;
import java.util.LinkedList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.itheima.entity.User;
import com.itheima.service.UserService;
import com.itheima.utils.SysConstant;
import com.itheima.utils.UtilFuns;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class FastMenuInterceptor extends AbstractInterceptor {
private User user;
private UserService userService;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 获取参数
HttpServletRequest request = ServletActionContext.getRequest();
// 连接名
String fastLinkName = (String) request.getParameter("fastLinkName");
// 菜单层级
String layerNum = (String) request.getParameter("layerNum");
if (UtilFuns.isNotEmpty(layerNum) && layerNum.equals("2")) {
// 中文编码
fastLinkName = new String(fastLinkName.getBytes("iso8859-1"), "utf-8");
// 获取session中的集合
LinkedList<String> list = this.getCommMenuList();
if(list.size()>=10){
list.removeLast();
}
if (list.contains(fastLinkName)) {
list.remove(list.indexOf(fastLinkName));
list.addFirst(fastLinkName);
} else {
list.addFirst(fastLinkName);
}
StringBuffer sb = new StringBuffer();
// 获取当前对象
for (String string : list) {
sb.append(string).append(",");
}
sb.deleteCharAt(sb.length() - 1);
user = this.getUser();
user.getUserInfo().setCommMenu(sb.toString());
this.getUserService().saveOrUpdate(user);
}
return invocation.invoke();
}
private LinkedList<String> getCommMenuList() {
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("currentUserInfoCommMenu");
if (UtilFuns.isNotEmpty(obj)) {
return (LinkedList<String>) obj;
}
String commMenu = this.getUser().getUserInfo().getCommMenu();
LinkedList<String> arrayList = new LinkedList();
if (UtilFuns.isEmpty(commMenu)) {
commMenu = "";
}
String[] split = commMenu.split(",");
for (int i = 0; i < split.length; i++) {
arrayList.addLast(split[i]);
}
session.setAttribute("currentUserInfoCommMenu", arrayList);
return arrayList;
}
private User getUser() {
User sessionUser = (User) ServletActionContext.getRequest().getSession()
.getAttribute(SysConstant.CURRENT_USER_INFO);
UserService userService = this.getUserService();
User user = userService.get(User.class, sessionUser.getId());
return user;
}
public UserService getUserService() {
if (UtilFuns.isNotEmpty(userService)) {
return userService;
}
WebApplicationContext webApplicationContext = WebApplicationContextUtils
.getWebApplicationContext(ServletActionContext.getServletContext());
UserService userService = (UserService) webApplicationContext.getBean("userService");
this.userService = userService;
return userService;
}
}