Blame view

src/com/fh/controller/system/login/LoginController.java 19.9 KB
ad5081d3   孙向锦   初始化项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  package com.fh.controller.system.login;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  import javax.annotation.Resource;
  import javax.servlet.http.HttpServletRequest;
  
  import org.apache.shiro.SecurityUtils;
  import org.apache.shiro.authc.AuthenticationException;
  import org.apache.shiro.authc.UsernamePasswordToken;
  import org.apache.shiro.crypto.hash.SimpleHash;
  import org.apache.shiro.session.Session;
  import org.apache.shiro.subject.Subject;
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.PathVariable;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.ResponseBody;
  import org.springframework.web.servlet.ModelAndView;
  
  import com.fh.controller.base.BaseController;
  import com.fh.service.fhoa.datajur.DatajurManager;
  import com.fh.service.system.appuser.AppuserManager;
  import com.fh.service.system.buttonrights.ButtonrightsManager;
  import com.fh.service.system.fhbutton.FhbuttonManager;
  import com.fh.service.system.fhlog.FHlogManager;
  import com.fh.service.system.loginimg.LogInImgManager;
  import com.fh.service.system.menu.MenuManager;
  import com.fh.entity.system.Menu;
  import com.fh.entity.system.Role;
  import com.fh.entity.system.User;
  import com.fh.service.system.role.RoleManager;
  import com.fh.service.system.user.UserManager;
  import com.fh.util.AppUtil;
  import com.fh.util.Const;
  import com.fh.util.DateUtil;
  import com.fh.util.Jurisdiction;
  import com.fh.util.PageData;
  import com.fh.util.RightsHelper;
  import com.fh.util.Tools;
bed6e1fc   孙向锦   添加其他功能
43
  
ad5081d3   孙向锦   初始化项目
44
45
46
47
48
49
  /**
   * 总入口
   * @author fh QQ 3 1 3 5 9 6 7 9 0[青苔]
   * 修改日期:2015/11/2
   */
  /**
ad5081d3   孙向锦   初始化项目
50
51
52
53
54
   *
   */
  @Controller
  public class LoginController extends BaseController {
  
bed6e1fc   孙向锦   添加其他功能
55
  	@Resource(name = "userService")
ad5081d3   孙向锦   初始化项目
56
  	private UserManager userService;
bed6e1fc   孙向锦   添加其他功能
57
  	@Resource(name = "menuService")
ad5081d3   孙向锦   初始化项目
58
  	private MenuManager menuService;
bed6e1fc   孙向锦   添加其他功能
59
  	@Resource(name = "roleService")
ad5081d3   孙向锦   初始化项目
60
  	private RoleManager roleService;
bed6e1fc   孙向锦   添加其他功能
61
  	@Resource(name = "buttonrightsService")
ad5081d3   孙向锦   初始化项目
62
  	private ButtonrightsManager buttonrightsService;
bed6e1fc   孙向锦   添加其他功能
63
  	@Resource(name = "fhbuttonService")
ad5081d3   孙向锦   初始化项目
64
  	private FhbuttonManager fhbuttonService;
bed6e1fc   孙向锦   添加其他功能
65
  	@Resource(name = "appuserService")
ad5081d3   孙向锦   初始化项目
66
  	private AppuserManager appuserService;
bed6e1fc   孙向锦   添加其他功能
67
  	@Resource(name = "datajurService")
ad5081d3   孙向锦   初始化项目
68
  	private DatajurManager datajurService;
bed6e1fc   孙向锦   添加其他功能
69
  	@Resource(name = "fhlogService")
ad5081d3   孙向锦   初始化项目
70
  	private FHlogManager FHLOG;
bed6e1fc   孙向锦   添加其他功能
71
  	@Resource(name = "loginimgService")
ad5081d3   孙向锦   初始化项目
72
  	private LogInImgManager loginimgService;
bed6e1fc   孙向锦   添加其他功能
73
74
75
76
  
  	/**
  	 * 访问登录页
  	 * 
ad5081d3   孙向锦   初始化项目
77
78
79
  	 * @return
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
80
81
  	@RequestMapping(value = "/login_toLogin")
  	public ModelAndView toLogin() throws Exception {
ad5081d3   孙向锦   初始化项目
82
83
84
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
  		pd = this.getPageData();
bed6e1fc   孙向锦   添加其他功能
85
  		pd = this.setLoginPd(pd); // 设置登录页面的配置参数
ad5081d3   孙向锦   初始化项目
86
  		mv.setViewName("system/index/login");
bed6e1fc   孙向锦   添加其他功能
87
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
88
89
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
90
91
92
93
  
  	/**
  	 * 请求登录,验证用户
  	 * 
ad5081d3   孙向锦   初始化项目
94
95
96
  	 * @return
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
97
  	@RequestMapping(value = "/login_login", produces = "application/json;charset=UTF-8")
ad5081d3   孙向锦   初始化项目
98
  	@ResponseBody
bed6e1fc   孙向锦   添加其他功能
99
100
  	public Object login() throws Exception {
  		Map<String, String> map = new HashMap<String, String>();
ad5081d3   孙向锦   初始化项目
101
102
103
  		PageData pd = new PageData();
  		pd = this.getPageData();
  		String errInfo = "";
81df8ce6   孙向锦   去掉多余的信息
104
  		String KEYDATA[] = pd.getString("KEYDATA").split(";;;");
bed6e1fc   孙向锦   添加其他功能
105
  		if (null != KEYDATA && KEYDATA.length >= 2) {
ad5081d3   孙向锦   初始化项目
106
  			Session session = Jurisdiction.getSession();
bed6e1fc   孙向锦   添加其他功能
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  			String sessionCode = (String) session
  					.getAttribute(Const.SESSION_SECURITY_CODE); // 获取session中的验证码
  			String USERNAME = KEYDATA[0]; // 登录过来的用户名
  			String PASSWORD = KEYDATA[1]; // 登录过来的密码
  			pd.put("USERNAME", USERNAME);
  			String passwd = new SimpleHash("SHA-1", USERNAME, PASSWORD)
  					.toString(); // 密码加密
  			pd.put("PASSWORD", passwd);
  			pd = userService.getUserByNameAndPwd(pd); // 根据用户名和密码去读取用户信息
  			if (pd != null) {
  				this.removeSession(USERNAME);// 请缓存
  				pd.put("LAST_LOGIN", DateUtil.getTime().toString());
  				userService.updateLastLogin(pd);
  				User user = new User();
  				user.setUSER_ID(pd.getString("USER_ID"));
  				user.setUSERNAME(pd.getString("USERNAME"));
  				user.setPASSWORD(pd.getString("PASSWORD"));
  				user.setNAME(pd.getString("NAME"));
  				user.setRIGHTS(pd.getString("RIGHTS"));
  				user.setROLE_ID(pd.getString("ROLE_ID"));
  				user.setLAST_LOGIN(pd.getString("LAST_LOGIN"));
  				user.setIP(pd.getString("IP"));
  				user.setSTATUS(pd.getString("STATUS"));
  				session.setAttribute(Const.SESSION_USER, user); // 把用户信息放session中
  				session.removeAttribute(Const.SESSION_SECURITY_CODE); // 清除登录验证码的session
  				// shiro加入身份验证
  				Subject subject = SecurityUtils.getSubject();
  				UsernamePasswordToken token = new UsernamePasswordToken(
  						USERNAME, PASSWORD);
  				try {
  					subject.login(token);
  				} catch (AuthenticationException e) {
  					errInfo = "身份验证失败!";
ad5081d3   孙向锦   初始化项目
140
  				}
bed6e1fc   孙向锦   添加其他功能
141
142
143
144
145
146
147
148
149
  			} else {
  				errInfo = "usererror"; // 用户名或密码有误
  				logBefore(logger, USERNAME + "登录系统密码或用户名错误");
  				FHLOG.save(USERNAME, "登录系统密码或用户名错误");
  			}
  			if (Tools.isEmpty(errInfo)) {
  				errInfo = "success"; // 验证成功
  				logBefore(logger, USERNAME + "登录系统");
  				FHLOG.save(USERNAME, "登录系统");
ad5081d3   孙向锦   初始化项目
150
  			}
bed6e1fc   孙向锦   添加其他功能
151
  		}
ad5081d3   孙向锦   初始化项目
152
153
154
  		map.put("result", errInfo);
  		return AppUtil.returnObject(new PageData(), map);
  	}
bed6e1fc   孙向锦   添加其他功能
155
156
157
158
159
160
  
  	/**
  	 * 访问系统首页
  	 * 
  	 * @param changeMenu
  	 *            :切换菜单参数
ad5081d3   孙向锦   初始化项目
161
162
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
163
164
165
  	@RequestMapping(value = "/main/{changeMenu}")
  	public ModelAndView login_index(
  			@PathVariable("changeMenu") String changeMenu) {
ad5081d3   孙向锦   初始化项目
166
167
168
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
  		pd = this.getPageData();
bed6e1fc   孙向锦   添加其他功能
169
  		try {
ad5081d3   孙向锦   初始化项目
170
  			Session session = Jurisdiction.getSession();
bed6e1fc   孙向锦   添加其他功能
171
  			User user = (User) session.getAttribute(Const.SESSION_USER); // 读取session中的用户信息(单独用户信息)
ad5081d3   孙向锦   初始化项目
172
  			if (user != null) {
bed6e1fc   孙向锦   添加其他功能
173
174
175
176
177
  				User userr = (User) session.getAttribute(Const.SESSION_USERROL); // 读取session中的用户信息(含角色信息)
  				if (null == userr) {
  					user = userService.getUserAndRoleById(user.getUSER_ID()); // 通过用户ID读取用户信息和角色信息
  					session.setAttribute(Const.SESSION_USERROL, user); // 存入session
  				} else {
ad5081d3   孙向锦   初始化项目
178
179
180
  					user = userr;
  				}
  				String USERNAME = user.getUSERNAME();
bed6e1fc   孙向锦   添加其他功能
181
182
  				Role role = user.getRole(); // 获取用户角色
  				String roleRights = role != null ? role.getRIGHTS() : ""; // 角色权限(菜单权限)
ad5081d3   孙向锦   初始化项目
183
  				String ROLE_IDS = user.getROLE_IDS();
bed6e1fc   孙向锦   添加其他功能
184
185
186
187
  				session.setAttribute(USERNAME + Const.SESSION_ROLE_RIGHTS,
  						roleRights); // 将角色权限存入session
  				session.setAttribute(Const.SESSION_USERNAME, USERNAME); // 放入用户名到session
  				this.setAttributeToAllDEPARTMENT_ID(session, USERNAME); // 把用户的组织机构权限放到session里面
ad5081d3   孙向锦   初始化项目
188
  				List<Menu> allmenuList = new ArrayList<Menu>();
bed6e1fc   孙向锦   添加其他功能
189
190
  				allmenuList = this.getAttributeMenu(session, USERNAME,
  						roleRights, getArrayRoleRights(ROLE_IDS)); // 菜单缓存
ad5081d3   孙向锦   初始化项目
191
  				List<Menu> menuList = new ArrayList<Menu>();
bed6e1fc   孙向锦   添加其他功能
192
193
194
195
196
197
198
  				menuList = this.changeMenuF(allmenuList, session, USERNAME,
  						changeMenu); // 切换菜单
  				if (null == session.getAttribute(USERNAME + Const.SESSION_QX)) {
  					session.setAttribute(USERNAME + Const.SESSION_QX,
  							this.getUQX(USERNAME)); // 主职角色按钮权限放到session中
  					session.setAttribute(USERNAME + Const.SESSION_QX2,
  							this.getUQX2(USERNAME)); // 副职角色按钮权限放到session中
ad5081d3   孙向锦   初始化项目
199
  				}
bed6e1fc   孙向锦   添加其他功能
200
  				this.getRemortIP(USERNAME); // 更新登录IP
ad5081d3   孙向锦   初始化项目
201
202
203
  				mv.setViewName("system/index/main");
  				mv.addObject("user", user);
  				mv.addObject("menuList", menuList);
bed6e1fc   孙向锦   添加其他功能
204
205
  			} else {
  				mv.setViewName("system/index/login");// session失效后跳转登录页面
ad5081d3   孙向锦   初始化项目
206
  			}
bed6e1fc   孙向锦   添加其他功能
207
  		} catch (Exception e) {
ad5081d3   孙向锦   初始化项目
208
209
210
  			mv.setViewName("system/index/login");
  			logger.error(e.getMessage(), e);
  		}
bed6e1fc   孙向锦   添加其他功能
211
212
  		pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
213
214
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
215
216
217
218
  
  	/**
  	 * 获取副职角色权限List
  	 * 
ad5081d3   孙向锦   初始化项目
219
220
221
222
  	 * @param ROLE_IDS
  	 * @return
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
223
224
  	public List<String> getArrayRoleRights(String ROLE_IDS) throws Exception {
  		if (Tools.notEmpty(ROLE_IDS)) {
ad5081d3   孙向锦   初始化项目
225
226
  			List<String> list = new ArrayList<String>();
  			String arryROLE_ID[] = ROLE_IDS.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
227
  			for (int i = 0; i < arryROLE_ID.length; i++) {
ad5081d3   孙向锦   初始化项目
228
229
230
  				PageData pd = new PageData();
  				pd.put("ROLE_ID", arryROLE_ID[i]);
  				pd = roleService.findObjectById(pd);
bed6e1fc   孙向锦   添加其他功能
231
  				if (null != pd) {
ad5081d3   孙向锦   初始化项目
232
  					String RIGHTS = pd.getString("RIGHTS");
bed6e1fc   孙向锦   添加其他功能
233
  					if (Tools.notEmpty(RIGHTS)) {
ad5081d3   孙向锦   初始化项目
234
235
236
237
238
  						list.add(RIGHTS);
  					}
  				}
  			}
  			return list.size() == 0 ? null : list;
bed6e1fc   孙向锦   添加其他功能
239
  		} else {
ad5081d3   孙向锦   初始化项目
240
241
242
  			return null;
  		}
  	}
bed6e1fc   孙向锦   添加其他功能
243
244
245
246
  
  	/**
  	 * 菜单缓存
  	 * 
ad5081d3   孙向锦   初始化项目
247
248
249
250
251
252
253
  	 * @param session
  	 * @param USERNAME
  	 * @param roleRights
  	 * @return
  	 * @throws Exception
  	 */
  	@SuppressWarnings("unchecked")
bed6e1fc   孙向锦   添加其他功能
254
255
  	public List<Menu> getAttributeMenu(Session session, String USERNAME,
  			String roleRights, List<String> arrayRoleRights) throws Exception {
ad5081d3   孙向锦   初始化项目
256
  		List<Menu> allmenuList = new ArrayList<Menu>();
bed6e1fc   孙向锦   添加其他功能
257
258
259
260
261
  		if (null == session.getAttribute(USERNAME + Const.SESSION_allmenuList)) {
  			allmenuList = menuService.listAllMenuQx("0"); // 获取所有菜单
  			if (Tools.notEmpty(roleRights)) {
  				allmenuList = this.readMenu(allmenuList, roleRights,
  						arrayRoleRights); // 根据角色权限获取本权限的菜单列表
ad5081d3   孙向锦   初始化项目
262
  			}
bed6e1fc   孙向锦   添加其他功能
263
264
265
266
267
  			session.setAttribute(USERNAME + Const.SESSION_allmenuList,
  					allmenuList);// 菜单权限放入session中
  		} else {
  			allmenuList = (List<Menu>) session.getAttribute(USERNAME
  					+ Const.SESSION_allmenuList);
ad5081d3   孙向锦   初始化项目
268
269
270
  		}
  		return allmenuList;
  	}
bed6e1fc   孙向锦   添加其他功能
271
272
273
274
275
276
277
278
  
  	/**
  	 * 根据角色权限获取本权限的菜单列表(递归处理)
  	 * 
  	 * @param menuList
  	 *            :传入的总菜单
  	 * @param roleRights
  	 *            :加密的权限字符串
ad5081d3   孙向锦   初始化项目
279
280
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
281
282
283
284
285
286
287
288
289
290
  	public List<Menu> readMenu(List<Menu> menuList, String roleRights,
  			List<String> arrayRoleRights) {
  		for (int i = 0; i < menuList.size(); i++) {
  			Boolean b1 = RightsHelper.testRights(roleRights, menuList.get(i)
  					.getMENU_ID());
  			menuList.get(i).setHasMenu(b1); // 赋予主职角色菜单权限
  			if (!b1 && null != arrayRoleRights) {
  				for (int n = 0; n < arrayRoleRights.size(); n++) {
  					if (RightsHelper.testRights(arrayRoleRights.get(n),
  							menuList.get(i).getMENU_ID())) {
ad5081d3   孙向锦   初始化项目
291
292
293
294
295
  						menuList.get(i).setHasMenu(true);
  						break;
  					}
  				}
  			}
bed6e1fc   孙向锦   添加其他功能
296
297
298
  			if (menuList.get(i).isHasMenu()) { // 判断是否有此菜单权限
  				this.readMenu(menuList.get(i).getSubMenu(), roleRights,
  						arrayRoleRights);// 是:继续排查其子菜单
ad5081d3   孙向锦   初始化项目
299
300
301
302
  			}
  		}
  		return menuList;
  	}
bed6e1fc   孙向锦   添加其他功能
303
304
305
306
  
  	/**
  	 * 切换菜单处理
  	 * 
ad5081d3   孙向锦   初始化项目
307
308
309
310
311
312
313
  	 * @param allmenuList
  	 * @param session
  	 * @param USERNAME
  	 * @param changeMenu
  	 * @return
  	 */
  	@SuppressWarnings("unchecked")
bed6e1fc   孙向锦   添加其他功能
314
315
  	public List<Menu> changeMenuF(List<Menu> allmenuList, Session session,
  			String USERNAME, String changeMenu) {
ad5081d3   孙向锦   初始化项目
316
317
  		List<Menu> menuList = new ArrayList<Menu>();
  		/** 菜单缓存为空 或者 传入的菜单类型和当前不一样的时候,条件成立,重新拆分菜单,把选择的菜单类型放入缓存 */
bed6e1fc   孙向锦   添加其他功能
318
319
  		if (null == session.getAttribute(USERNAME + Const.SESSION_menuList)
  				|| (!changeMenu.equals(session.getAttribute("changeMenu")))) {
ad5081d3   孙向锦   初始化项目
320
321
322
323
  			List<Menu> menuList1 = new ArrayList<Menu>();
  			List<Menu> menuList2 = new ArrayList<Menu>();
  			List<Menu> menuList3 = new ArrayList<Menu>();
  			List<Menu> menuList4 = new ArrayList<Menu>();
bed6e1fc   孙向锦   添加其他功能
324
  			for (int i = 0; i < allmenuList.size(); i++) {// 拆分菜单
ad5081d3   孙向锦   初始化项目
325
  				Menu menu = allmenuList.get(i);
bed6e1fc   孙向锦   添加其他功能
326
327
328
329
330
331
332
333
  				if ("1".equals(menu.getMENU_TYPE())) {
  					menuList1.add(menu); // 系统菜单
  				} else if ("2".equals(menu.getMENU_TYPE())) {
  					menuList2.add(menu); // 业务菜单
  				} else if ("3".equals(menu.getMENU_TYPE())) {
  					menuList3.add(menu); // 菜单类型三
  				} else if ("4".equals(menu.getMENU_TYPE())) {
  					menuList4.add(menu); // 菜单类型四
ad5081d3   孙向锦   初始化项目
334
335
336
  				}
  			}
  			session.removeAttribute(USERNAME + Const.SESSION_menuList);
bed6e1fc   孙向锦   添加其他功能
337
338
339
  			if ("index".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList2);
ad5081d3   孙向锦   初始化项目
340
341
342
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "index");
  				menuList = menuList2;
bed6e1fc   孙向锦   添加其他功能
343
344
345
  			} else if ("2".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList1);
ad5081d3   孙向锦   初始化项目
346
347
348
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "2");
  				menuList = menuList1;
bed6e1fc   孙向锦   添加其他功能
349
350
351
  			} else if ("3".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList3);
ad5081d3   孙向锦   初始化项目
352
353
354
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "3");
  				menuList = menuList3;
bed6e1fc   孙向锦   添加其他功能
355
356
357
  			} else if ("4".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList4);
ad5081d3   孙向锦   初始化项目
358
359
360
361
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "4");
  				menuList = menuList4;
  			}
bed6e1fc   孙向锦   添加其他功能
362
363
364
  		} else {
  			menuList = (List<Menu>) session.getAttribute(USERNAME
  					+ Const.SESSION_menuList);
ad5081d3   孙向锦   初始化项目
365
366
367
  		}
  		return menuList;
  	}
bed6e1fc   孙向锦   添加其他功能
368
369
370
371
  
  	/**
  	 * 把用户的组织机构权限放到session里面
  	 * 
ad5081d3   孙向锦   初始化项目
372
373
374
  	 * @param session
  	 * @param USERNAME
  	 * @return
bed6e1fc   孙向锦   添加其他功能
375
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
376
  	 */
bed6e1fc   孙向锦   添加其他功能
377
378
379
380
  	public void setAttributeToAllDEPARTMENT_ID(Session session, String USERNAME)
  			throws Exception {
  		String DEPARTMENT_IDS = "0", DEPARTMENT_ID = "0";
  		if (!"admin".equals(USERNAME)) {
ad5081d3   孙向锦   初始化项目
381
  			PageData pd = datajurService.getDEPARTMENT_IDS(USERNAME);
bed6e1fc   孙向锦   添加其他功能
382
383
  			DEPARTMENT_IDS = null == pd ? "无权" : pd.getString("DEPARTMENT_IDS");
  			DEPARTMENT_ID = null == pd ? "无权" : pd.getString("DEPARTMENT_ID");
ad5081d3   孙向锦   初始化项目
384
  		}
bed6e1fc   孙向锦   添加其他功能
385
386
  		session.setAttribute(Const.DEPARTMENT_IDS, DEPARTMENT_IDS); // 把用户的组织机构权限集合放到session里面
  		session.setAttribute(Const.DEPARTMENT_ID, DEPARTMENT_ID); // 把用户的最高组织机构权限放到session里面
ad5081d3   孙向锦   初始化项目
387
  	}
bed6e1fc   孙向锦   添加其他功能
388
  
ad5081d3   孙向锦   初始化项目
389
390
  	/**
  	 * 进入tab标签
bed6e1fc   孙向锦   添加其他功能
391
  	 * 
ad5081d3   孙向锦   初始化项目
392
393
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
394
395
  	@RequestMapping(value = "/tab")
  	public String tab() {
ad5081d3   孙向锦   初始化项目
396
397
  		return "system/index/tab";
  	}
bed6e1fc   孙向锦   添加其他功能
398
  
ad5081d3   孙向锦   初始化项目
399
400
  	/**
  	 * 进入首页后的默认页面
bed6e1fc   孙向锦   添加其他功能
401
  	 * 
ad5081d3   孙向锦   初始化项目
402
  	 * @return
bed6e1fc   孙向锦   添加其他功能
403
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
404
  	 */
bed6e1fc   孙向锦   添加其他功能
405
406
  	@RequestMapping(value = "/login_default")
  	public ModelAndView defaultPage() throws Exception {
ad5081d3   孙向锦   初始化项目
407
408
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
bed6e1fc   孙向锦   添加其他功能
409
410
411
412
413
414
415
  		pd.put("userCount",
  				Integer.parseInt(userService.getUserCount("").get("userCount")
  						.toString()) - 1); // 系统用户数
  		pd.put("appUserCount",
  				Integer.parseInt(appuserService.getAppUserCount("")
  						.get("appUserCount").toString())); // 会员数
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
416
417
418
  		mv.setViewName("system/index/default");
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
419
  
ad5081d3   孙向锦   初始化项目
420
421
  	/**
  	 * 用户注销
bed6e1fc   孙向锦   添加其他功能
422
  	 * 
ad5081d3   孙向锦   初始化项目
423
424
  	 * @param session
  	 * @return
bed6e1fc   孙向锦   添加其他功能
425
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
426
  	 */
bed6e1fc   孙向锦   添加其他功能
427
428
429
430
  	@RequestMapping(value = "/logout")
  	public ModelAndView logout() throws Exception {
  		String USERNAME = Jurisdiction.getUsername(); // 当前登录的用户名
  		logBefore(logger, USERNAME + "退出系统");
ad5081d3   孙向锦   初始化项目
431
432
433
  		FHLOG.save(USERNAME, "退出");
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
bed6e1fc   孙向锦   添加其他功能
434
435
436
  		this.removeSession(USERNAME);// 请缓存
  		// shiro销毁登录
  		Subject subject = SecurityUtils.getSubject();
ad5081d3   孙向锦   初始化项目
437
438
439
  		subject.logout();
  		pd = this.getPageData();
  		pd.put("msg", pd.getString("msg"));
bed6e1fc   孙向锦   添加其他功能
440
  		pd = this.setLoginPd(pd); // 设置登录页面的配置参数
ad5081d3   孙向锦   初始化项目
441
  		mv.setViewName("system/index/login");
bed6e1fc   孙向锦   添加其他功能
442
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
443
444
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
445
  
ad5081d3   孙向锦   初始化项目
446
447
448
  	/**
  	 * 清理session
  	 */
bed6e1fc   孙向锦   添加其他功能
449
450
  	public void removeSession(String USERNAME) {
  		Session session = Jurisdiction.getSession(); // 以下清除session缓存
ad5081d3   孙向锦   初始化项目
451
452
453
454
455
456
457
458
459
460
461
462
463
  		session.removeAttribute(Const.SESSION_USER);
  		session.removeAttribute(USERNAME + Const.SESSION_ROLE_RIGHTS);
  		session.removeAttribute(USERNAME + Const.SESSION_allmenuList);
  		session.removeAttribute(USERNAME + Const.SESSION_menuList);
  		session.removeAttribute(USERNAME + Const.SESSION_QX);
  		session.removeAttribute(USERNAME + Const.SESSION_QX2);
  		session.removeAttribute(Const.SESSION_userpds);
  		session.removeAttribute(Const.SESSION_USERNAME);
  		session.removeAttribute(Const.SESSION_USERROL);
  		session.removeAttribute("changeMenu");
  		session.removeAttribute("DEPARTMENT_IDS");
  		session.removeAttribute("DEPARTMENT_ID");
  	}
bed6e1fc   孙向锦   添加其他功能
464
465
466
467
  
  	/**
  	 * 设置登录页面的配置参数
  	 * 
ad5081d3   孙向锦   初始化项目
468
469
470
  	 * @param pd
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
471
472
473
474
  	public PageData setLoginPd(PageData pd) {
  		pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
  		String strLOGINEDIT = Tools.readTxtFile(Const.LOGINEDIT); // 读取登录页面配置
  		if (null != strLOGINEDIT && !"".equals(strLOGINEDIT)) {
ad5081d3   孙向锦   初始化项目
475
  			String strLo[] = strLOGINEDIT.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
476
  			if (strLo.length == 2) {
ad5081d3   孙向锦   初始化项目
477
478
479
480
481
  				pd.put("isZhuce", strLo[0]);
  				pd.put("isMusic", strLo[1]);
  			}
  		}
  		try {
bed6e1fc   孙向锦   添加其他功能
482
  			List<PageData> listImg = loginimgService.listAll(pd); // 登录背景图片
ad5081d3   孙向锦   初始化项目
483
484
485
486
487
488
  			pd.put("listImg", listImg);
  		} catch (Exception e) {
  			e.printStackTrace();
  		}
  		return pd;
  	}
bed6e1fc   孙向锦   添加其他功能
489
490
491
492
  
  	/**
  	 * 获取用户权限
  	 * 
ad5081d3   孙向锦   初始化项目
493
494
495
  	 * @param session
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
496
  	public Map<String, String> getUQX(String USERNAME) {
ad5081d3   孙向锦   初始化项目
497
498
499
500
  		PageData pd = new PageData();
  		Map<String, String> map = new HashMap<String, String>();
  		try {
  			pd.put(Const.SESSION_USERNAME, USERNAME);
bed6e1fc   孙向锦   添加其他功能
501
  
ad5081d3   孙向锦   初始化项目
502
  			PageData userpd = new PageData();
bed6e1fc   孙向锦   添加其他功能
503
  			userpd = userService.findByUsername(pd); // 通过用户名获取用户信息
ad5081d3   孙向锦   初始化项目
504
505
  			String ROLE_ID = userpd.get("ROLE_ID").toString();
  			String ROLE_IDS = userpd.getString("ROLE_IDS");
bed6e1fc   孙向锦   添加其他功能
506
507
508
509
510
511
  			pd.put("ROLE_ID", ROLE_ID); // 获取角色ID
  			pd = roleService.findObjectById(pd); // 获取角色信息
  			map.put("adds", pd.getString("ADD_QX")); // 增
  			map.put("dels", pd.getString("DEL_QX")); // 删
  			map.put("edits", pd.getString("EDIT_QX")); // 改
  			map.put("chas", pd.getString("CHA_QX")); // 查
ad5081d3   孙向锦   初始化项目
512
  			List<PageData> buttonQXnamelist = new ArrayList<PageData>();
bed6e1fc   孙向锦   添加其他功能
513
514
515
516
  			if ("admin".equals(USERNAME)) {
  				buttonQXnamelist = fhbuttonService.listAll(pd); // admin用户拥有所有按钮权限
  			} else {
  				if (Tools.notEmpty(ROLE_IDS)) {// (主副职角色综合按钮权限)
ad5081d3   孙向锦   初始化项目
517
518
  					ROLE_IDS = ROLE_IDS + ROLE_ID;
  					String arryROLE_ID[] = ROLE_IDS.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
519
520
521
522
523
  					buttonQXnamelist = buttonrightsService
  							.listAllBrAndQxnameByZF(arryROLE_ID);
  				} else { // (主职角色按钮权限)
  					buttonQXnamelist = buttonrightsService
  							.listAllBrAndQxname(pd); // 此角色拥有的按钮权限标识列表
ad5081d3   孙向锦   初始化项目
524
525
  				}
  			}
bed6e1fc   孙向锦   添加其他功能
526
527
  			for (int i = 0; i < buttonQXnamelist.size(); i++) {
  				map.put(buttonQXnamelist.get(i).getString("QX_NAME"), "1"); // 按钮权限
ad5081d3   孙向锦   初始化项目
528
529
530
  			}
  		} catch (Exception e) {
  			logger.error(e.toString(), e);
bed6e1fc   孙向锦   添加其他功能
531
  		}
ad5081d3   孙向锦   初始化项目
532
533
  		return map;
  	}
bed6e1fc   孙向锦   添加其他功能
534
535
536
537
  
  	/**
  	 * 获取用户权限(处理副职角色)
  	 * 
ad5081d3   孙向锦   初始化项目
538
539
540
  	 * @param session
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
541
  	public Map<String, List<String>> getUQX2(String USERNAME) {
ad5081d3   孙向锦   初始化项目
542
543
544
545
546
  		PageData pd = new PageData();
  		Map<String, List<String>> maps = new HashMap<String, List<String>>();
  		try {
  			pd.put(Const.SESSION_USERNAME, USERNAME);
  			PageData userpd = new PageData();
bed6e1fc   孙向锦   添加其他功能
547
  			userpd = userService.findByUsername(pd); // 通过用户名获取用户信息
ad5081d3   孙向锦   初始化项目
548
  			String ROLE_IDS = userpd.getString("ROLE_IDS");
bed6e1fc   孙向锦   添加其他功能
549
  			if (Tools.notEmpty(ROLE_IDS)) {
ad5081d3   孙向锦   初始化项目
550
551
552
553
554
555
  				String arryROLE_ID[] = ROLE_IDS.split(",fh,");
  				PageData rolePd = new PageData();
  				List<String> addsList = new ArrayList<String>();
  				List<String> delsList = new ArrayList<String>();
  				List<String> editsList = new ArrayList<String>();
  				List<String> chasList = new ArrayList<String>();
bed6e1fc   孙向锦   添加其他功能
556
  				for (int i = 0; i < arryROLE_ID.length; i++) {
ad5081d3   孙向锦   初始化项目
557
558
559
560
561
562
563
  					rolePd.put("ROLE_ID", arryROLE_ID[i]);
  					rolePd = roleService.findObjectById(rolePd);
  					addsList.add(rolePd.getString("ADD_QX"));
  					delsList.add(rolePd.getString("DEL_QX"));
  					editsList.add(rolePd.getString("EDIT_QX"));
  					chasList.add(rolePd.getString("CHA_QX"));
  				}
bed6e1fc   孙向锦   添加其他功能
564
565
566
567
  				maps.put("addsList", addsList); // 增
  				maps.put("delsList", delsList); // 删
  				maps.put("editsList", editsList); // 改
  				maps.put("chasList", chasList); // 查
ad5081d3   孙向锦   初始化项目
568
569
570
  			}
  		} catch (Exception e) {
  			logger.error(e.toString(), e);
bed6e1fc   孙向锦   添加其他功能
571
  		}
ad5081d3   孙向锦   初始化项目
572
573
  		return maps;
  	}
bed6e1fc   孙向锦   添加其他功能
574
575
576
577
  
  	/**
  	 * 更新登录用户的IP
  	 * 
ad5081d3   孙向锦   初始化项目
578
579
580
  	 * @param USERNAME
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
581
  	public void getRemortIP(String USERNAME) throws Exception {
ad5081d3   孙向锦   初始化项目
582
583
584
  		PageData pd = new PageData();
  		HttpServletRequest request = this.getRequest();
  		String ip = "";
bed6e1fc   孙向锦   添加其他功能
585
586
587
588
589
  		if (request.getHeader("x-forwarded-for") == null) {
  			ip = request.getRemoteAddr();
  		} else {
  			ip = request.getHeader("x-forwarded-for");
  		}
ad5081d3   孙向锦   初始化项目
590
591
592
  		pd.put("USERNAME", USERNAME);
  		pd.put("IP", ip);
  		userService.saveIP(pd);
bed6e1fc   孙向锦   添加其他功能
593
594
  	}
  
ad5081d3   孙向锦   初始化项目
595
  }