Blame view

src/com/fh/controller/system/login/LoginController.java 25 KB
ad5081d3   孙向锦   初始化项目
1
2
3
  package com.fh.controller.system.login;
  
  import java.util.ArrayList;
9f161055   孙向锦   修改高斯客户反馈
4
  import java.util.Date;
ad5081d3   孙向锦   初始化项目
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  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;
9f161055   孙向锦   修改高斯客户反馈
25
26
27
  import com.fh.entity.system.Menu;
  import com.fh.entity.system.Role;
  import com.fh.entity.system.User;
338594c8   孙向锦   添加教师端页面
28
  import com.fh.service.api.V1Manager;
ad5081d3   孙向锦   初始化项目
29
  import com.fh.service.fhoa.datajur.DatajurManager;
9f161055   孙向锦   修改高斯客户反馈
30
  import com.fh.service.sunvote.event.EventManager;
338594c8   孙向锦   添加教师端页面
31
  import com.fh.service.sunvote.school.SchoolManager;
6b3a5ad0   孙向锦   添加管理员界面
32
33
  import com.fh.service.sunvote.schooladmin.SchoolAdminManager;
  import com.fh.service.sunvote.sclass.SClassManager;
338594c8   孙向锦   添加教师端页面
34
  import com.fh.service.sunvote.teacher.TeacherManager;
ad5081d3   孙向锦   初始化项目
35
36
37
38
39
40
  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;
ad5081d3   孙向锦   初始化项目
41
42
43
44
45
46
47
48
49
  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   孙向锦   添加其他功能
50
  
ad5081d3   孙向锦   初始化项目
51
52
  /**
   * 总入口
ad5081d3   孙向锦   初始化项目
53
54
55
   * 修改日期:2015/11/2
   */
  /**
ad5081d3   孙向锦   初始化项目
56
57
58
59
60
   *
   */
  @Controller
  public class LoginController extends BaseController {
  
bed6e1fc   孙向锦   添加其他功能
61
  	@Resource(name = "userService")
ad5081d3   孙向锦   初始化项目
62
  	private UserManager userService;
bed6e1fc   孙向锦   添加其他功能
63
  	@Resource(name = "menuService")
ad5081d3   孙向锦   初始化项目
64
  	private MenuManager menuService;
bed6e1fc   孙向锦   添加其他功能
65
  	@Resource(name = "roleService")
ad5081d3   孙向锦   初始化项目
66
  	private RoleManager roleService;
bed6e1fc   孙向锦   添加其他功能
67
  	@Resource(name = "buttonrightsService")
ad5081d3   孙向锦   初始化项目
68
  	private ButtonrightsManager buttonrightsService;
bed6e1fc   孙向锦   添加其他功能
69
  	@Resource(name = "fhbuttonService")
ad5081d3   孙向锦   初始化项目
70
  	private FhbuttonManager fhbuttonService;
bed6e1fc   孙向锦   添加其他功能
71
  	@Resource(name = "appuserService")
ad5081d3   孙向锦   初始化项目
72
  	private AppuserManager appuserService;
bed6e1fc   孙向锦   添加其他功能
73
  	@Resource(name = "datajurService")
ad5081d3   孙向锦   初始化项目
74
  	private DatajurManager datajurService;
bed6e1fc   孙向锦   添加其他功能
75
  	@Resource(name = "fhlogService")
ad5081d3   孙向锦   初始化项目
76
  	private FHlogManager FHLOG;
bed6e1fc   孙向锦   添加其他功能
77
  	@Resource(name = "loginimgService")
ad5081d3   孙向锦   初始化项目
78
  	private LogInImgManager loginimgService;
4f32cbf7   孙向锦   更新新东方服务界面维护文档
79
  	@Resource(name = "teacherService")
338594c8   孙向锦   添加教师端页面
80
  	private TeacherManager teacherService;
4f32cbf7   孙向锦   更新新东方服务界面维护文档
81
  	@Resource(name = "schoolService")
338594c8   孙向锦   添加教师端页面
82
  	private SchoolManager schoolService;
4f32cbf7   孙向锦   更新新东方服务界面维护文档
83
  
338594c8   孙向锦   添加教师端页面
84
  	@Resource(name = "v1Service")
4f32cbf7   孙向锦   更新新东方服务界面维护文档
85
  	private V1Manager v1Service;
6b3a5ad0   孙向锦   添加管理员界面
86
87
88
  	
  	@Resource(name="schooladminService")
  	private SchoolAdminManager schooladminService;
bed6e1fc   孙向锦   添加其他功能
89
  
4f32cbf7   孙向锦   更新新东方服务界面维护文档
90
  	@Resource(name = "eventService")
9f161055   孙向锦   修改高斯客户反馈
91
  	private EventManager eventService;
6b3a5ad0   孙向锦   添加管理员界面
92
93
94
95
  	
  	@Resource(name="sclassService")
  	private SClassManager sclassService;
  	
4f32cbf7   孙向锦   更新新东方服务界面维护文档
96
  
bed6e1fc   孙向锦   添加其他功能
97
98
99
  	/**
  	 * 访问登录页
  	 * 
ad5081d3   孙向锦   初始化项目
100
101
102
  	 * @return
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
103
104
  	@RequestMapping(value = "/login_toLogin")
  	public ModelAndView toLogin() throws Exception {
ad5081d3   孙向锦   初始化项目
105
106
107
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
  		pd = this.getPageData();
bed6e1fc   孙向锦   添加其他功能
108
  		pd = this.setLoginPd(pd); // 设置登录页面的配置参数
ad5081d3   孙向锦   初始化项目
109
  		mv.setViewName("system/index/login");
bed6e1fc   孙向锦   添加其他功能
110
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
111
112
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
113
114
115
116
  
  	/**
  	 * 请求登录,验证用户
  	 * 
ad5081d3   孙向锦   初始化项目
117
118
119
  	 * @return
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
120
  	@RequestMapping(value = "/login_login", produces = "application/json;charset=UTF-8")
ad5081d3   孙向锦   初始化项目
121
  	@ResponseBody
bed6e1fc   孙向锦   添加其他功能
122
123
  	public Object login() throws Exception {
  		Map<String, String> map = new HashMap<String, String>();
ad5081d3   孙向锦   初始化项目
124
125
126
  		PageData pd = new PageData();
  		pd = this.getPageData();
  		String errInfo = "";
81df8ce6   孙向锦   去掉多余的信息
127
  		String KEYDATA[] = pd.getString("KEYDATA").split(";;;");
bed6e1fc   孙向锦   添加其他功能
128
  		if (null != KEYDATA && KEYDATA.length >= 2) {
ad5081d3   孙向锦   初始化项目
129
  			Session session = Jurisdiction.getSession();
bed6e1fc   孙向锦   添加其他功能
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
  			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"));
4f32cbf7   孙向锦   更新新东方服务界面维护文档
150
  
9f161055   孙向锦   修改高斯客户反馈
151
152
153
154
155
  				PageData eventPd = new PageData();
  				eventPd.put("EVENT_ID", get32UUID());
  				eventPd.put("EVENT_NAME", "login");
  				eventPd.put("EVENT_USER", pd.getString("USER_ID"));
  				eventPd.put("EVENT_TYPE", "0");
4f32cbf7   孙向锦   更新新东方服务界面维护文档
156
  				eventPd.put("EVENT_START_TIME", Tools.date2Str(new Date()));
9f161055   孙向锦   修改高斯客户反馈
157
  				eventPd.put("CLIENT_ID", "SERVER");
4f32cbf7   孙向锦   更新新东方服务界面维护文档
158
  				eventPd.put("EVENT_IP", pd.getString("IP"));
9f161055   孙向锦   修改高斯客户反馈
159
  				eventService.save(eventPd);
4f32cbf7   孙向锦   更新新东方服务界面维护文档
160
161
162
  
  				if ("57bb1e6f138247a0b05cc721a5da1b64".equals(pd
  						.getString("ROLE_ID"))) {
338594c8   孙向锦   添加教师端页面
163
  					map.put("teacher", pd.getString("RIGHTS"));
c617106f   孙向锦   添加即时测功能
164
165
166
167
168
169
170
  					PageData tpd = new PageData();
  					tpd.put("ACCOUT", pd.get("USERNAME"));
  					tpd.put("PASSWORD", PASSWORD);
  					PageData pageData = teacherService.getUserInfo(tpd);
  					if(pageData != null){
  						user.setTeacherID(pageData.getString("ID"));
  					}
338594c8   孙向锦   添加教师端页面
171
  				}
6b3a5ad0   孙向锦   添加管理员界面
172
173
174
175
176
177
178
179
180
181
182
183
  				if("51824b61dd6941f19c673996374781e5".equals(pd
  						.getString("ROLE_ID"))){
  					map.put("admin",  pd.getString("RIGHTS"));
  					PageData tpd = new PageData();
  					tpd.put("ACCOUT", pd.get("USERNAME"));
  					tpd.put("PASSWORD", passwd);
  					PageData pageData = schooladminService.findByusername(tpd);
  					if(pageData != null){
  						user.setTeacherID(pageData.getString("SCHOOLADMIN_ID"));
  						user.setUSER_ID(pageData.getString("SCHOOLADMIN_ID"));
  					}
  				}
bed6e1fc   孙向锦   添加其他功能
184
185
186
187
188
189
190
191
192
193
194
195
196
  				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   孙向锦   初始化项目
197
  				}
bed6e1fc   孙向锦   添加其他功能
198
199
200
201
202
203
204
205
206
  			} else {
  				errInfo = "usererror"; // 用户名或密码有误
  				logBefore(logger, USERNAME + "登录系统密码或用户名错误");
  				FHLOG.save(USERNAME, "登录系统密码或用户名错误");
  			}
  			if (Tools.isEmpty(errInfo)) {
  				errInfo = "success"; // 验证成功
  				logBefore(logger, USERNAME + "登录系统");
  				FHLOG.save(USERNAME, "登录系统");
ad5081d3   孙向锦   初始化项目
207
  			}
bed6e1fc   孙向锦   添加其他功能
208
  		}
ad5081d3   孙向锦   初始化项目
209
210
211
  		map.put("result", errInfo);
  		return AppUtil.returnObject(new PageData(), map);
  	}
bed6e1fc   孙向锦   添加其他功能
212
213
214
215
216
217
  
  	/**
  	 * 访问系统首页
  	 * 
  	 * @param changeMenu
  	 *            :切换菜单参数
ad5081d3   孙向锦   初始化项目
218
219
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
220
221
222
  	@RequestMapping(value = "/main/{changeMenu}")
  	public ModelAndView login_index(
  			@PathVariable("changeMenu") String changeMenu) {
ad5081d3   孙向锦   初始化项目
223
224
225
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
  		pd = this.getPageData();
bed6e1fc   孙向锦   添加其他功能
226
  		try {
ad5081d3   孙向锦   初始化项目
227
  			Session session = Jurisdiction.getSession();
4f32cbf7   孙向锦   更新新东方服务界面维护文档
228
  
bed6e1fc   孙向锦   添加其他功能
229
  			User user = (User) session.getAttribute(Const.SESSION_USER); // 读取session中的用户信息(单独用户信息)
ad5081d3   孙向锦   初始化项目
230
  			if (user != null) {
bed6e1fc   孙向锦   添加其他功能
231
  				User userr = (User) session.getAttribute(Const.SESSION_USERROL); // 读取session中的用户信息(含角色信息)
6b3a5ad0   孙向锦   添加管理员界面
232
233
234
235
236
237
  //				if (null == userr) {
  //					userr = userService.getUserAndRoleById(user.getUSER_ID()); // 通过用户ID读取用户信息和角色信息
  //					session.setAttribute(Const.SESSION_USERROL, user); // 存入session
  //				} else {
  //					user = userr;
  //				}
ad5081d3   孙向锦   初始化项目
238
  				String USERNAME = user.getUSERNAME();
4f32cbf7   孙向锦   更新新东方服务界面维护文档
239
  				if ("teacher".equals(changeMenu)) {
338594c8   孙向锦   添加教师端页面
240
241
242
243
  					PageData tpd = new PageData();
  					tpd.put("ID", user.getUSER_ID());
  					List<PageData> teacherInfos = v1Service.getTeacherInfo(tpd);
  					pd.put("TEACHER", teacherInfos);
a51b67cf   孙向锦   交互第一个版本
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
  					if (teacherInfos != null && teacherInfos.size() > 0) {
  						PageData sData = teacherInfos.get(0);
  						session.setAttribute(USERNAME + Const.SCHOOL_ID,
  								sData.get("SCHOOL_ID"));
  						session.setAttribute(USERNAME + Const.SCHOOL_NAME,
  								sData.get("SCHOOL_NAME"));
  						session.setAttribute(USERNAME + Const.GRADE_ID,
  								sData.get("GRADE_ID"));
  						session.setAttribute(USERNAME + Const.GRADE_NAME,
  								sData.get("GRADE_NAME"));
  						session.setAttribute(USERNAME + Const.CLASS_ID,
  								sData.get("CLASS_ID"));
  						session.setAttribute(USERNAME + Const.CLASS_NAME,
  								sData.get("CLASS_NAME"));
  						session.setAttribute(USERNAME + Const.SUBJECT_ID,
  								sData.get("SUBJECT_ID"));
  						session.setAttribute(USERNAME + Const.SUBJECT_NAME,
  								sData.get("SUBJECT_NAME"));
7d60b75e   孙向锦   添加班级-1
262
263
  						session.setAttribute(USERNAME + Const.TERM_ID,
  								sData.get("TERM_ID"));
a51b67cf   孙向锦   交互第一个版本
264
  					}
4f32cbf7   孙向锦   更新新东方服务界面维护文档
265
  					session.setAttribute(Const.SESSION_USERNAME, USERNAME); // 放入用户名到session
338594c8   孙向锦   添加教师端页面
266
  					mv.setViewName("sunvote/teacher/teacher_main");
4f32cbf7   孙向锦   更新新东方服务界面维护文档
267
268
  					mv.addObject("user", user);
  					pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
6b3a5ad0   孙向锦   添加管理员界面
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
  					mv.addObject("pd", pd);
  					return mv;
  				}else if("admin".equals(changeMenu)){
  					PageData tpd = new PageData();
  					tpd.put("ID", user.getUSER_ID());
  					
  					List<PageData> adminInfos = v1Service.getAdminInfo(tpd);
  					List<PageData> gradeInfos = new ArrayList<PageData>();
  					List<PageData> subjectInfos = new ArrayList<PageData>();
  					//  查询学校信息
  					for(PageData pad : adminInfos){
  						PageData tmpd = new PageData();
  						Object gradeId = pad.get("GRADE_ID");
  						tmpd.put("SNAME", pad.get("SNAME"));// 学校名称
  						tmpd.put("SCHOOL_ID", pad.get("SCHOOL_ID"));//学校ID
  						tmpd.put("GRADE_ID", pad.get("GRADE_ID"));//年级id
  						tmpd.put("GNAME", pad.get("GNAME"));//年级名称
  						tmpd.put("SUBJECT_ID", pad.get("SUBJECT_ID"));// 科目id
  						tmpd.put("SCNAME", pad.get("SCNAME"));// 科目名称
  						if(gradeId != null && !"".equals(gradeId)){
  							List<PageData> classInfos = sclassService.listAll(tmpd);
  							tmpd.put("classInfos", classInfos);
  							gradeInfos.add(tmpd);
  						}else{
  							subjectInfos.add(tmpd);
  						}
  						mv.addObject("SNAME", pad.get("SNAME"));
  						mv.addObject("SCHOOL_ID", pad.get("SCHOOL_ID"));
  					}
  					mv.addObject("gradeInfos", gradeInfos);
  					mv.addObject("subjectInfos", subjectInfos);
  					session.setAttribute(Const.SESSION_USERNAME, USERNAME); // 放入用户名到session
  					mv.setViewName("sunvote/admin/admin_main");
  					mv.addObject("user", user);
  					pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
4f32cbf7   孙向锦   更新新东方服务界面维护文档
304
305
  					mv.addObject("pd", pd);
  					return mv;
338594c8   孙向锦   添加教师端页面
306
  				}
4f32cbf7   孙向锦   更新新东方服务界面维护文档
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
  
  				Role role = user.getRole(); // 获取用户角色
  				String roleRights = role != null ? role.getRIGHTS() : ""; // 角色权限(菜单权限)
  				String ROLE_IDS = user.getROLE_IDS();
  				session.setAttribute(USERNAME + Const.SESSION_ROLE_RIGHTS,
  						roleRights); // 将角色权限存入session
  				session.setAttribute(Const.SESSION_USERNAME, USERNAME); // 放入用户名到session
  				this.setAttributeToAllDEPARTMENT_ID(session, USERNAME); // 把用户的组织机构权限放到session里面
  				List<Menu> allmenuList = new ArrayList<Menu>();
  				allmenuList = this.getAttributeMenu(session, USERNAME,
  						roleRights, getArrayRoleRights(ROLE_IDS)); // 菜单缓存
  				List<Menu> menuList = new ArrayList<Menu>();
  				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中
  				}
  				this.getRemortIP(USERNAME); // 更新登录IP
  				menuList = this.changeMenuF(allmenuList, session, USERNAME,
  						changeMenu); // 切换菜单
  				mv.setViewName("system/index/main");
  
ad5081d3   孙向锦   初始化项目
330
331
  				mv.addObject("user", user);
  				mv.addObject("menuList", menuList);
bed6e1fc   孙向锦   添加其他功能
332
333
  			} else {
  				mv.setViewName("system/index/login");// session失效后跳转登录页面
ad5081d3   孙向锦   初始化项目
334
  			}
bed6e1fc   孙向锦   添加其他功能
335
  		} catch (Exception e) {
ad5081d3   孙向锦   初始化项目
336
337
338
  			mv.setViewName("system/index/login");
  			logger.error(e.getMessage(), e);
  		}
bed6e1fc   孙向锦   添加其他功能
339
340
  		pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
341
342
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
343
344
345
346
  
  	/**
  	 * 获取副职角色权限List
  	 * 
ad5081d3   孙向锦   初始化项目
347
348
349
350
  	 * @param ROLE_IDS
  	 * @return
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
351
352
  	public List<String> getArrayRoleRights(String ROLE_IDS) throws Exception {
  		if (Tools.notEmpty(ROLE_IDS)) {
ad5081d3   孙向锦   初始化项目
353
354
  			List<String> list = new ArrayList<String>();
  			String arryROLE_ID[] = ROLE_IDS.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
355
  			for (int i = 0; i < arryROLE_ID.length; i++) {
ad5081d3   孙向锦   初始化项目
356
357
358
  				PageData pd = new PageData();
  				pd.put("ROLE_ID", arryROLE_ID[i]);
  				pd = roleService.findObjectById(pd);
bed6e1fc   孙向锦   添加其他功能
359
  				if (null != pd) {
ad5081d3   孙向锦   初始化项目
360
  					String RIGHTS = pd.getString("RIGHTS");
bed6e1fc   孙向锦   添加其他功能
361
  					if (Tools.notEmpty(RIGHTS)) {
ad5081d3   孙向锦   初始化项目
362
363
364
365
366
  						list.add(RIGHTS);
  					}
  				}
  			}
  			return list.size() == 0 ? null : list;
bed6e1fc   孙向锦   添加其他功能
367
  		} else {
ad5081d3   孙向锦   初始化项目
368
369
370
  			return null;
  		}
  	}
bed6e1fc   孙向锦   添加其他功能
371
372
373
374
  
  	/**
  	 * 菜单缓存
  	 * 
ad5081d3   孙向锦   初始化项目
375
376
377
378
379
380
381
  	 * @param session
  	 * @param USERNAME
  	 * @param roleRights
  	 * @return
  	 * @throws Exception
  	 */
  	@SuppressWarnings("unchecked")
bed6e1fc   孙向锦   添加其他功能
382
383
  	public List<Menu> getAttributeMenu(Session session, String USERNAME,
  			String roleRights, List<String> arrayRoleRights) throws Exception {
ad5081d3   孙向锦   初始化项目
384
  		List<Menu> allmenuList = new ArrayList<Menu>();
bed6e1fc   孙向锦   添加其他功能
385
386
387
388
389
  		if (null == session.getAttribute(USERNAME + Const.SESSION_allmenuList)) {
  			allmenuList = menuService.listAllMenuQx("0"); // 获取所有菜单
  			if (Tools.notEmpty(roleRights)) {
  				allmenuList = this.readMenu(allmenuList, roleRights,
  						arrayRoleRights); // 根据角色权限获取本权限的菜单列表
ad5081d3   孙向锦   初始化项目
390
  			}
bed6e1fc   孙向锦   添加其他功能
391
392
393
394
395
  			session.setAttribute(USERNAME + Const.SESSION_allmenuList,
  					allmenuList);// 菜单权限放入session中
  		} else {
  			allmenuList = (List<Menu>) session.getAttribute(USERNAME
  					+ Const.SESSION_allmenuList);
ad5081d3   孙向锦   初始化项目
396
397
398
  		}
  		return allmenuList;
  	}
bed6e1fc   孙向锦   添加其他功能
399
400
401
402
403
404
405
406
  
  	/**
  	 * 根据角色权限获取本权限的菜单列表(递归处理)
  	 * 
  	 * @param menuList
  	 *            :传入的总菜单
  	 * @param roleRights
  	 *            :加密的权限字符串
ad5081d3   孙向锦   初始化项目
407
408
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
409
410
411
412
413
414
415
416
417
418
  	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   孙向锦   初始化项目
419
420
421
422
423
  						menuList.get(i).setHasMenu(true);
  						break;
  					}
  				}
  			}
bed6e1fc   孙向锦   添加其他功能
424
425
426
  			if (menuList.get(i).isHasMenu()) { // 判断是否有此菜单权限
  				this.readMenu(menuList.get(i).getSubMenu(), roleRights,
  						arrayRoleRights);// 是:继续排查其子菜单
ad5081d3   孙向锦   初始化项目
427
428
429
430
  			}
  		}
  		return menuList;
  	}
bed6e1fc   孙向锦   添加其他功能
431
432
433
434
  
  	/**
  	 * 切换菜单处理
  	 * 
ad5081d3   孙向锦   初始化项目
435
436
437
438
439
440
441
  	 * @param allmenuList
  	 * @param session
  	 * @param USERNAME
  	 * @param changeMenu
  	 * @return
  	 */
  	@SuppressWarnings("unchecked")
bed6e1fc   孙向锦   添加其他功能
442
443
  	public List<Menu> changeMenuF(List<Menu> allmenuList, Session session,
  			String USERNAME, String changeMenu) {
ad5081d3   孙向锦   初始化项目
444
445
  		List<Menu> menuList = new ArrayList<Menu>();
  		/** 菜单缓存为空 或者 传入的菜单类型和当前不一样的时候,条件成立,重新拆分菜单,把选择的菜单类型放入缓存 */
bed6e1fc   孙向锦   添加其他功能
446
447
  		if (null == session.getAttribute(USERNAME + Const.SESSION_menuList)
  				|| (!changeMenu.equals(session.getAttribute("changeMenu")))) {
ad5081d3   孙向锦   初始化项目
448
449
450
451
  			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   孙向锦   添加其他功能
452
  			for (int i = 0; i < allmenuList.size(); i++) {// 拆分菜单
ad5081d3   孙向锦   初始化项目
453
  				Menu menu = allmenuList.get(i);
bed6e1fc   孙向锦   添加其他功能
454
455
456
457
458
459
460
461
  				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   孙向锦   初始化项目
462
463
464
  				}
  			}
  			session.removeAttribute(USERNAME + Const.SESSION_menuList);
bed6e1fc   孙向锦   添加其他功能
465
466
467
  			if ("index".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList2);
ad5081d3   孙向锦   初始化项目
468
469
470
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "index");
  				menuList = menuList2;
bed6e1fc   孙向锦   添加其他功能
471
472
473
  			} else if ("2".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList1);
ad5081d3   孙向锦   初始化项目
474
475
476
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "2");
  				menuList = menuList1;
bed6e1fc   孙向锦   添加其他功能
477
478
479
  			} else if ("3".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList3);
ad5081d3   孙向锦   初始化项目
480
481
482
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "3");
  				menuList = menuList3;
bed6e1fc   孙向锦   添加其他功能
483
484
485
  			} else if ("4".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList4);
ad5081d3   孙向锦   初始化项目
486
487
488
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "4");
  				menuList = menuList4;
4f32cbf7   孙向锦   更新新东方服务界面维护文档
489
  			} else if ("teacher".equals(changeMenu)) {
338594c8   孙向锦   添加教师端页面
490
491
492
493
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList2);
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "index");
ad5081d3   孙向锦   初始化项目
494
  			}
bed6e1fc   孙向锦   添加其他功能
495
496
497
  		} else {
  			menuList = (List<Menu>) session.getAttribute(USERNAME
  					+ Const.SESSION_menuList);
ad5081d3   孙向锦   初始化项目
498
499
500
  		}
  		return menuList;
  	}
bed6e1fc   孙向锦   添加其他功能
501
502
503
504
  
  	/**
  	 * 把用户的组织机构权限放到session里面
  	 * 
ad5081d3   孙向锦   初始化项目
505
506
507
  	 * @param session
  	 * @param USERNAME
  	 * @return
bed6e1fc   孙向锦   添加其他功能
508
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
509
  	 */
bed6e1fc   孙向锦   添加其他功能
510
511
512
513
  	public void setAttributeToAllDEPARTMENT_ID(Session session, String USERNAME)
  			throws Exception {
  		String DEPARTMENT_IDS = "0", DEPARTMENT_ID = "0";
  		if (!"admin".equals(USERNAME)) {
ad5081d3   孙向锦   初始化项目
514
  			PageData pd = datajurService.getDEPARTMENT_IDS(USERNAME);
bed6e1fc   孙向锦   添加其他功能
515
516
  			DEPARTMENT_IDS = null == pd ? "无权" : pd.getString("DEPARTMENT_IDS");
  			DEPARTMENT_ID = null == pd ? "无权" : pd.getString("DEPARTMENT_ID");
ad5081d3   孙向锦   初始化项目
517
  		}
bed6e1fc   孙向锦   添加其他功能
518
519
  		session.setAttribute(Const.DEPARTMENT_IDS, DEPARTMENT_IDS); // 把用户的组织机构权限集合放到session里面
  		session.setAttribute(Const.DEPARTMENT_ID, DEPARTMENT_ID); // 把用户的最高组织机构权限放到session里面
ad5081d3   孙向锦   初始化项目
520
  	}
bed6e1fc   孙向锦   添加其他功能
521
  
ad5081d3   孙向锦   初始化项目
522
523
  	/**
  	 * 进入tab标签
bed6e1fc   孙向锦   添加其他功能
524
  	 * 
ad5081d3   孙向锦   初始化项目
525
526
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
527
528
  	@RequestMapping(value = "/tab")
  	public String tab() {
ad5081d3   孙向锦   初始化项目
529
530
  		return "system/index/tab";
  	}
bed6e1fc   孙向锦   添加其他功能
531
  
ad5081d3   孙向锦   初始化项目
532
533
  	/**
  	 * 进入首页后的默认页面
bed6e1fc   孙向锦   添加其他功能
534
  	 * 
ad5081d3   孙向锦   初始化项目
535
  	 * @return
bed6e1fc   孙向锦   添加其他功能
536
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
537
  	 */
bed6e1fc   孙向锦   添加其他功能
538
539
  	@RequestMapping(value = "/login_default")
  	public ModelAndView defaultPage() throws Exception {
ad5081d3   孙向锦   初始化项目
540
541
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
bed6e1fc   孙向锦   添加其他功能
542
543
544
545
546
547
548
  		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   孙向锦   初始化项目
549
550
551
  		mv.setViewName("system/index/default");
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
552
  
ad5081d3   孙向锦   初始化项目
553
554
  	/**
  	 * 用户注销
bed6e1fc   孙向锦   添加其他功能
555
  	 * 
ad5081d3   孙向锦   初始化项目
556
557
  	 * @param session
  	 * @return
bed6e1fc   孙向锦   添加其他功能
558
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
559
  	 */
bed6e1fc   孙向锦   添加其他功能
560
561
562
563
  	@RequestMapping(value = "/logout")
  	public ModelAndView logout() throws Exception {
  		String USERNAME = Jurisdiction.getUsername(); // 当前登录的用户名
  		logBefore(logger, USERNAME + "退出系统");
ad5081d3   孙向锦   初始化项目
564
565
566
  		FHLOG.save(USERNAME, "退出");
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
bed6e1fc   孙向锦   添加其他功能
567
568
569
  		this.removeSession(USERNAME);// 请缓存
  		// shiro销毁登录
  		Subject subject = SecurityUtils.getSubject();
ad5081d3   孙向锦   初始化项目
570
571
572
  		subject.logout();
  		pd = this.getPageData();
  		pd.put("msg", pd.getString("msg"));
bed6e1fc   孙向锦   添加其他功能
573
  		pd = this.setLoginPd(pd); // 设置登录页面的配置参数
ad5081d3   孙向锦   初始化项目
574
  		mv.setViewName("system/index/login");
bed6e1fc   孙向锦   添加其他功能
575
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
576
577
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
578
  
ad5081d3   孙向锦   初始化项目
579
580
581
  	/**
  	 * 清理session
  	 */
bed6e1fc   孙向锦   添加其他功能
582
583
  	public void removeSession(String USERNAME) {
  		Session session = Jurisdiction.getSession(); // 以下清除session缓存
ad5081d3   孙向锦   初始化项目
584
585
586
587
588
589
590
591
592
593
594
595
596
  		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   孙向锦   添加其他功能
597
598
599
600
  
  	/**
  	 * 设置登录页面的配置参数
  	 * 
ad5081d3   孙向锦   初始化项目
601
602
603
  	 * @param pd
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
604
605
606
607
  	public PageData setLoginPd(PageData pd) {
  		pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
  		String strLOGINEDIT = Tools.readTxtFile(Const.LOGINEDIT); // 读取登录页面配置
  		if (null != strLOGINEDIT && !"".equals(strLOGINEDIT)) {
ad5081d3   孙向锦   初始化项目
608
  			String strLo[] = strLOGINEDIT.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
609
  			if (strLo.length == 2) {
ad5081d3   孙向锦   初始化项目
610
611
612
613
614
  				pd.put("isZhuce", strLo[0]);
  				pd.put("isMusic", strLo[1]);
  			}
  		}
  		try {
bed6e1fc   孙向锦   添加其他功能
615
  			List<PageData> listImg = loginimgService.listAll(pd); // 登录背景图片
ad5081d3   孙向锦   初始化项目
616
617
618
619
620
621
  			pd.put("listImg", listImg);
  		} catch (Exception e) {
  			e.printStackTrace();
  		}
  		return pd;
  	}
bed6e1fc   孙向锦   添加其他功能
622
623
624
625
  
  	/**
  	 * 获取用户权限
  	 * 
ad5081d3   孙向锦   初始化项目
626
627
628
  	 * @param session
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
629
  	public Map<String, String> getUQX(String USERNAME) {
ad5081d3   孙向锦   初始化项目
630
631
632
633
  		PageData pd = new PageData();
  		Map<String, String> map = new HashMap<String, String>();
  		try {
  			pd.put(Const.SESSION_USERNAME, USERNAME);
bed6e1fc   孙向锦   添加其他功能
634
  
ad5081d3   孙向锦   初始化项目
635
  			PageData userpd = new PageData();
bed6e1fc   孙向锦   添加其他功能
636
  			userpd = userService.findByUsername(pd); // 通过用户名获取用户信息
ad5081d3   孙向锦   初始化项目
637
638
  			String ROLE_ID = userpd.get("ROLE_ID").toString();
  			String ROLE_IDS = userpd.getString("ROLE_IDS");
bed6e1fc   孙向锦   添加其他功能
639
640
641
642
643
644
  			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   孙向锦   初始化项目
645
  			List<PageData> buttonQXnamelist = new ArrayList<PageData>();
bed6e1fc   孙向锦   添加其他功能
646
647
648
649
  			if ("admin".equals(USERNAME)) {
  				buttonQXnamelist = fhbuttonService.listAll(pd); // admin用户拥有所有按钮权限
  			} else {
  				if (Tools.notEmpty(ROLE_IDS)) {// (主副职角色综合按钮权限)
ad5081d3   孙向锦   初始化项目
650
651
  					ROLE_IDS = ROLE_IDS + ROLE_ID;
  					String arryROLE_ID[] = ROLE_IDS.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
652
653
654
655
656
  					buttonQXnamelist = buttonrightsService
  							.listAllBrAndQxnameByZF(arryROLE_ID);
  				} else { // (主职角色按钮权限)
  					buttonQXnamelist = buttonrightsService
  							.listAllBrAndQxname(pd); // 此角色拥有的按钮权限标识列表
ad5081d3   孙向锦   初始化项目
657
658
  				}
  			}
bed6e1fc   孙向锦   添加其他功能
659
660
  			for (int i = 0; i < buttonQXnamelist.size(); i++) {
  				map.put(buttonQXnamelist.get(i).getString("QX_NAME"), "1"); // 按钮权限
ad5081d3   孙向锦   初始化项目
661
662
663
  			}
  		} catch (Exception e) {
  			logger.error(e.toString(), e);
bed6e1fc   孙向锦   添加其他功能
664
  		}
ad5081d3   孙向锦   初始化项目
665
666
  		return map;
  	}
bed6e1fc   孙向锦   添加其他功能
667
668
669
670
  
  	/**
  	 * 获取用户权限(处理副职角色)
  	 * 
ad5081d3   孙向锦   初始化项目
671
672
673
  	 * @param session
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
674
  	public Map<String, List<String>> getUQX2(String USERNAME) {
ad5081d3   孙向锦   初始化项目
675
676
677
678
679
  		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   孙向锦   添加其他功能
680
  			userpd = userService.findByUsername(pd); // 通过用户名获取用户信息
ad5081d3   孙向锦   初始化项目
681
  			String ROLE_IDS = userpd.getString("ROLE_IDS");
bed6e1fc   孙向锦   添加其他功能
682
  			if (Tools.notEmpty(ROLE_IDS)) {
ad5081d3   孙向锦   初始化项目
683
684
685
686
687
688
  				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   孙向锦   添加其他功能
689
  				for (int i = 0; i < arryROLE_ID.length; i++) {
ad5081d3   孙向锦   初始化项目
690
691
692
693
694
695
696
  					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   孙向锦   添加其他功能
697
698
699
700
  				maps.put("addsList", addsList); // 增
  				maps.put("delsList", delsList); // 删
  				maps.put("editsList", editsList); // 改
  				maps.put("chasList", chasList); // 查
ad5081d3   孙向锦   初始化项目
701
702
703
  			}
  		} catch (Exception e) {
  			logger.error(e.toString(), e);
bed6e1fc   孙向锦   添加其他功能
704
  		}
ad5081d3   孙向锦   初始化项目
705
706
  		return maps;
  	}
bed6e1fc   孙向锦   添加其他功能
707
708
709
710
  
  	/**
  	 * 更新登录用户的IP
  	 * 
ad5081d3   孙向锦   初始化项目
711
712
713
  	 * @param USERNAME
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
714
  	public void getRemortIP(String USERNAME) throws Exception {
ad5081d3   孙向锦   初始化项目
715
716
717
  		PageData pd = new PageData();
  		HttpServletRequest request = this.getRequest();
  		String ip = "";
bed6e1fc   孙向锦   添加其他功能
718
719
720
721
722
  		if (request.getHeader("x-forwarded-for") == null) {
  			ip = request.getRemoteAddr();
  		} else {
  			ip = request.getHeader("x-forwarded-for");
  		}
ad5081d3   孙向锦   初始化项目
723
724
725
  		pd.put("USERNAME", USERNAME);
  		pd.put("IP", ip);
  		userService.saveIP(pd);
bed6e1fc   孙向锦   添加其他功能
726
727
  	}
  
ad5081d3   孙向锦   初始化项目
728
  }