Blame view

src/com/fh/controller/system/login/LoginController.java 24.9 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
  				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"));
6b3a5ad0   孙向锦   添加管理员界面
181
182
  					}
  				}
bed6e1fc   孙向锦   添加其他功能
183
184
185
186
187
188
189
190
191
192
193
194
195
  				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   孙向锦   初始化项目
196
  				}
bed6e1fc   孙向锦   添加其他功能
197
198
199
200
201
202
203
204
205
  			} else {
  				errInfo = "usererror"; // 用户名或密码有误
  				logBefore(logger, USERNAME + "登录系统密码或用户名错误");
  				FHLOG.save(USERNAME, "登录系统密码或用户名错误");
  			}
  			if (Tools.isEmpty(errInfo)) {
  				errInfo = "success"; // 验证成功
  				logBefore(logger, USERNAME + "登录系统");
  				FHLOG.save(USERNAME, "登录系统");
ad5081d3   孙向锦   初始化项目
206
  			}
bed6e1fc   孙向锦   添加其他功能
207
  		}
ad5081d3   孙向锦   初始化项目
208
209
210
  		map.put("result", errInfo);
  		return AppUtil.returnObject(new PageData(), map);
  	}
bed6e1fc   孙向锦   添加其他功能
211
212
213
214
215
216
  
  	/**
  	 * 访问系统首页
  	 * 
  	 * @param changeMenu
  	 *            :切换菜单参数
ad5081d3   孙向锦   初始化项目
217
218
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
219
220
221
  	@RequestMapping(value = "/main/{changeMenu}")
  	public ModelAndView login_index(
  			@PathVariable("changeMenu") String changeMenu) {
ad5081d3   孙向锦   初始化项目
222
223
224
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
  		pd = this.getPageData();
bed6e1fc   孙向锦   添加其他功能
225
  		try {
ad5081d3   孙向锦   初始化项目
226
  			Session session = Jurisdiction.getSession();
4f32cbf7   孙向锦   更新新东方服务界面维护文档
227
  
f143f558   孙向锦   修改管理员登录白屏问题
228
  			User user = (User)session.getAttribute(Const.SESSION_USER);						//读取session中的用户信息(单独用户信息)
ad5081d3   孙向锦   初始化项目
229
  			if (user != null) {
f143f558   孙向锦   修改管理员登录白屏问题
230
231
232
233
234
235
236
  				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{
  					user = userr;
  				}
ad5081d3   孙向锦   初始化项目
237
  				String USERNAME = user.getUSERNAME();
4f32cbf7   孙向锦   更新新东方服务界面维护文档
238
  				if ("teacher".equals(changeMenu)) {
338594c8   孙向锦   添加教师端页面
239
240
241
242
  					PageData tpd = new PageData();
  					tpd.put("ID", user.getUSER_ID());
  					List<PageData> teacherInfos = v1Service.getTeacherInfo(tpd);
  					pd.put("TEACHER", teacherInfos);
a51b67cf   孙向锦   交互第一个版本
243
  					if (teacherInfos != null && teacherInfos.size() > 0) {
f143f558   孙向锦   修改管理员登录白屏问题
244
  						PageData sData = teacherInfos.get(0); 
a51b67cf   孙向锦   交互第一个版本
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
  						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
261
262
  						session.setAttribute(USERNAME + Const.TERM_ID,
  								sData.get("TERM_ID"));
a51b67cf   孙向锦   交互第一个版本
263
  					}
4f32cbf7   孙向锦   更新新东方服务界面维护文档
264
  					session.setAttribute(Const.SESSION_USERNAME, USERNAME); // 放入用户名到session
338594c8   孙向锦   添加教师端页面
265
  					mv.setViewName("sunvote/teacher/teacher_main");
4f32cbf7   孙向锦   更新新东方服务界面维护文档
266
267
  					mv.addObject("user", user);
  					pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
6b3a5ad0   孙向锦   添加管理员界面
268
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
  					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   孙向锦   更新新东方服务界面维护文档
303
304
  					mv.addObject("pd", pd);
  					return mv;
338594c8   孙向锦   添加教师端页面
305
  				}
4f32cbf7   孙向锦   更新新东方服务界面维护文档
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
  
  				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   孙向锦   初始化项目
329
330
  				mv.addObject("user", user);
  				mv.addObject("menuList", menuList);
bed6e1fc   孙向锦   添加其他功能
331
332
  			} else {
  				mv.setViewName("system/index/login");// session失效后跳转登录页面
ad5081d3   孙向锦   初始化项目
333
  			}
bed6e1fc   孙向锦   添加其他功能
334
  		} catch (Exception e) {
ad5081d3   孙向锦   初始化项目
335
336
337
  			mv.setViewName("system/index/login");
  			logger.error(e.getMessage(), e);
  		}
bed6e1fc   孙向锦   添加其他功能
338
339
  		pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
340
341
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
342
343
344
345
  
  	/**
  	 * 获取副职角色权限List
  	 * 
ad5081d3   孙向锦   初始化项目
346
347
348
349
  	 * @param ROLE_IDS
  	 * @return
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
350
351
  	public List<String> getArrayRoleRights(String ROLE_IDS) throws Exception {
  		if (Tools.notEmpty(ROLE_IDS)) {
ad5081d3   孙向锦   初始化项目
352
353
  			List<String> list = new ArrayList<String>();
  			String arryROLE_ID[] = ROLE_IDS.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
354
  			for (int i = 0; i < arryROLE_ID.length; i++) {
ad5081d3   孙向锦   初始化项目
355
356
357
  				PageData pd = new PageData();
  				pd.put("ROLE_ID", arryROLE_ID[i]);
  				pd = roleService.findObjectById(pd);
bed6e1fc   孙向锦   添加其他功能
358
  				if (null != pd) {
ad5081d3   孙向锦   初始化项目
359
  					String RIGHTS = pd.getString("RIGHTS");
bed6e1fc   孙向锦   添加其他功能
360
  					if (Tools.notEmpty(RIGHTS)) {
ad5081d3   孙向锦   初始化项目
361
362
363
364
365
  						list.add(RIGHTS);
  					}
  				}
  			}
  			return list.size() == 0 ? null : list;
bed6e1fc   孙向锦   添加其他功能
366
  		} else {
ad5081d3   孙向锦   初始化项目
367
368
369
  			return null;
  		}
  	}
bed6e1fc   孙向锦   添加其他功能
370
371
372
373
  
  	/**
  	 * 菜单缓存
  	 * 
ad5081d3   孙向锦   初始化项目
374
375
376
377
378
379
380
  	 * @param session
  	 * @param USERNAME
  	 * @param roleRights
  	 * @return
  	 * @throws Exception
  	 */
  	@SuppressWarnings("unchecked")
bed6e1fc   孙向锦   添加其他功能
381
382
  	public List<Menu> getAttributeMenu(Session session, String USERNAME,
  			String roleRights, List<String> arrayRoleRights) throws Exception {
ad5081d3   孙向锦   初始化项目
383
  		List<Menu> allmenuList = new ArrayList<Menu>();
bed6e1fc   孙向锦   添加其他功能
384
385
386
387
388
  		if (null == session.getAttribute(USERNAME + Const.SESSION_allmenuList)) {
  			allmenuList = menuService.listAllMenuQx("0"); // 获取所有菜单
  			if (Tools.notEmpty(roleRights)) {
  				allmenuList = this.readMenu(allmenuList, roleRights,
  						arrayRoleRights); // 根据角色权限获取本权限的菜单列表
ad5081d3   孙向锦   初始化项目
389
  			}
bed6e1fc   孙向锦   添加其他功能
390
391
392
393
394
  			session.setAttribute(USERNAME + Const.SESSION_allmenuList,
  					allmenuList);// 菜单权限放入session中
  		} else {
  			allmenuList = (List<Menu>) session.getAttribute(USERNAME
  					+ Const.SESSION_allmenuList);
ad5081d3   孙向锦   初始化项目
395
396
397
  		}
  		return allmenuList;
  	}
bed6e1fc   孙向锦   添加其他功能
398
399
400
401
402
403
404
405
  
  	/**
  	 * 根据角色权限获取本权限的菜单列表(递归处理)
  	 * 
  	 * @param menuList
  	 *            :传入的总菜单
  	 * @param roleRights
  	 *            :加密的权限字符串
ad5081d3   孙向锦   初始化项目
406
407
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
408
409
410
411
412
413
414
415
416
417
  	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   孙向锦   初始化项目
418
419
420
421
422
  						menuList.get(i).setHasMenu(true);
  						break;
  					}
  				}
  			}
bed6e1fc   孙向锦   添加其他功能
423
424
425
  			if (menuList.get(i).isHasMenu()) { // 判断是否有此菜单权限
  				this.readMenu(menuList.get(i).getSubMenu(), roleRights,
  						arrayRoleRights);// 是:继续排查其子菜单
ad5081d3   孙向锦   初始化项目
426
427
428
429
  			}
  		}
  		return menuList;
  	}
bed6e1fc   孙向锦   添加其他功能
430
431
432
433
  
  	/**
  	 * 切换菜单处理
  	 * 
ad5081d3   孙向锦   初始化项目
434
435
436
437
438
439
440
  	 * @param allmenuList
  	 * @param session
  	 * @param USERNAME
  	 * @param changeMenu
  	 * @return
  	 */
  	@SuppressWarnings("unchecked")
bed6e1fc   孙向锦   添加其他功能
441
442
  	public List<Menu> changeMenuF(List<Menu> allmenuList, Session session,
  			String USERNAME, String changeMenu) {
ad5081d3   孙向锦   初始化项目
443
444
  		List<Menu> menuList = new ArrayList<Menu>();
  		/** 菜单缓存为空 或者 传入的菜单类型和当前不一样的时候,条件成立,重新拆分菜单,把选择的菜单类型放入缓存 */
bed6e1fc   孙向锦   添加其他功能
445
446
  		if (null == session.getAttribute(USERNAME + Const.SESSION_menuList)
  				|| (!changeMenu.equals(session.getAttribute("changeMenu")))) {
ad5081d3   孙向锦   初始化项目
447
448
449
450
  			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   孙向锦   添加其他功能
451
  			for (int i = 0; i < allmenuList.size(); i++) {// 拆分菜单
ad5081d3   孙向锦   初始化项目
452
  				Menu menu = allmenuList.get(i);
bed6e1fc   孙向锦   添加其他功能
453
454
455
456
457
458
459
460
  				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   孙向锦   初始化项目
461
462
463
  				}
  			}
  			session.removeAttribute(USERNAME + Const.SESSION_menuList);
bed6e1fc   孙向锦   添加其他功能
464
465
466
  			if ("index".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList2);
ad5081d3   孙向锦   初始化项目
467
468
469
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "index");
  				menuList = menuList2;
bed6e1fc   孙向锦   添加其他功能
470
471
472
  			} else if ("2".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList1);
ad5081d3   孙向锦   初始化项目
473
474
475
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "2");
  				menuList = menuList1;
bed6e1fc   孙向锦   添加其他功能
476
477
478
  			} else if ("3".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList3);
ad5081d3   孙向锦   初始化项目
479
480
481
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "3");
  				menuList = menuList3;
bed6e1fc   孙向锦   添加其他功能
482
483
484
  			} else if ("4".equals(changeMenu)) {
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList4);
ad5081d3   孙向锦   初始化项目
485
486
487
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "4");
  				menuList = menuList4;
4f32cbf7   孙向锦   更新新东方服务界面维护文档
488
  			} else if ("teacher".equals(changeMenu)) {
338594c8   孙向锦   添加教师端页面
489
490
491
492
  				session.setAttribute(USERNAME + Const.SESSION_menuList,
  						menuList2);
  				session.removeAttribute("changeMenu");
  				session.setAttribute("changeMenu", "index");
ad5081d3   孙向锦   初始化项目
493
  			}
bed6e1fc   孙向锦   添加其他功能
494
495
496
  		} else {
  			menuList = (List<Menu>) session.getAttribute(USERNAME
  					+ Const.SESSION_menuList);
ad5081d3   孙向锦   初始化项目
497
498
499
  		}
  		return menuList;
  	}
bed6e1fc   孙向锦   添加其他功能
500
501
502
503
  
  	/**
  	 * 把用户的组织机构权限放到session里面
  	 * 
ad5081d3   孙向锦   初始化项目
504
505
506
  	 * @param session
  	 * @param USERNAME
  	 * @return
bed6e1fc   孙向锦   添加其他功能
507
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
508
  	 */
bed6e1fc   孙向锦   添加其他功能
509
510
511
512
  	public void setAttributeToAllDEPARTMENT_ID(Session session, String USERNAME)
  			throws Exception {
  		String DEPARTMENT_IDS = "0", DEPARTMENT_ID = "0";
  		if (!"admin".equals(USERNAME)) {
ad5081d3   孙向锦   初始化项目
513
  			PageData pd = datajurService.getDEPARTMENT_IDS(USERNAME);
bed6e1fc   孙向锦   添加其他功能
514
515
  			DEPARTMENT_IDS = null == pd ? "无权" : pd.getString("DEPARTMENT_IDS");
  			DEPARTMENT_ID = null == pd ? "无权" : pd.getString("DEPARTMENT_ID");
ad5081d3   孙向锦   初始化项目
516
  		}
bed6e1fc   孙向锦   添加其他功能
517
518
  		session.setAttribute(Const.DEPARTMENT_IDS, DEPARTMENT_IDS); // 把用户的组织机构权限集合放到session里面
  		session.setAttribute(Const.DEPARTMENT_ID, DEPARTMENT_ID); // 把用户的最高组织机构权限放到session里面
ad5081d3   孙向锦   初始化项目
519
  	}
bed6e1fc   孙向锦   添加其他功能
520
  
ad5081d3   孙向锦   初始化项目
521
522
  	/**
  	 * 进入tab标签
bed6e1fc   孙向锦   添加其他功能
523
  	 * 
ad5081d3   孙向锦   初始化项目
524
525
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
526
527
  	@RequestMapping(value = "/tab")
  	public String tab() {
ad5081d3   孙向锦   初始化项目
528
529
  		return "system/index/tab";
  	}
bed6e1fc   孙向锦   添加其他功能
530
  
ad5081d3   孙向锦   初始化项目
531
532
  	/**
  	 * 进入首页后的默认页面
bed6e1fc   孙向锦   添加其他功能
533
  	 * 
ad5081d3   孙向锦   初始化项目
534
  	 * @return
bed6e1fc   孙向锦   添加其他功能
535
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
536
  	 */
bed6e1fc   孙向锦   添加其他功能
537
538
  	@RequestMapping(value = "/login_default")
  	public ModelAndView defaultPage() throws Exception {
ad5081d3   孙向锦   初始化项目
539
540
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
bed6e1fc   孙向锦   添加其他功能
541
542
543
544
545
546
547
  		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   孙向锦   初始化项目
548
549
550
  		mv.setViewName("system/index/default");
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
551
  
ad5081d3   孙向锦   初始化项目
552
553
  	/**
  	 * 用户注销
bed6e1fc   孙向锦   添加其他功能
554
  	 * 
ad5081d3   孙向锦   初始化项目
555
556
  	 * @param session
  	 * @return
bed6e1fc   孙向锦   添加其他功能
557
  	 * @throws Exception
ad5081d3   孙向锦   初始化项目
558
  	 */
bed6e1fc   孙向锦   添加其他功能
559
560
561
562
  	@RequestMapping(value = "/logout")
  	public ModelAndView logout() throws Exception {
  		String USERNAME = Jurisdiction.getUsername(); // 当前登录的用户名
  		logBefore(logger, USERNAME + "退出系统");
ad5081d3   孙向锦   初始化项目
563
564
565
  		FHLOG.save(USERNAME, "退出");
  		ModelAndView mv = this.getModelAndView();
  		PageData pd = new PageData();
bed6e1fc   孙向锦   添加其他功能
566
567
568
  		this.removeSession(USERNAME);// 请缓存
  		// shiro销毁登录
  		Subject subject = SecurityUtils.getSubject();
ad5081d3   孙向锦   初始化项目
569
570
571
  		subject.logout();
  		pd = this.getPageData();
  		pd.put("msg", pd.getString("msg"));
bed6e1fc   孙向锦   添加其他功能
572
  		pd = this.setLoginPd(pd); // 设置登录页面的配置参数
ad5081d3   孙向锦   初始化项目
573
  		mv.setViewName("system/index/login");
bed6e1fc   孙向锦   添加其他功能
574
  		mv.addObject("pd", pd);
ad5081d3   孙向锦   初始化项目
575
576
  		return mv;
  	}
bed6e1fc   孙向锦   添加其他功能
577
  
ad5081d3   孙向锦   初始化项目
578
579
580
  	/**
  	 * 清理session
  	 */
bed6e1fc   孙向锦   添加其他功能
581
582
  	public void removeSession(String USERNAME) {
  		Session session = Jurisdiction.getSession(); // 以下清除session缓存
ad5081d3   孙向锦   初始化项目
583
584
585
586
587
588
589
590
591
592
593
594
595
  		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   孙向锦   添加其他功能
596
597
598
599
  
  	/**
  	 * 设置登录页面的配置参数
  	 * 
ad5081d3   孙向锦   初始化项目
600
601
602
  	 * @param pd
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
603
604
605
606
  	public PageData setLoginPd(PageData pd) {
  		pd.put("SYSNAME", Tools.readTxtFile(Const.SYSNAME)); // 读取系统名称
  		String strLOGINEDIT = Tools.readTxtFile(Const.LOGINEDIT); // 读取登录页面配置
  		if (null != strLOGINEDIT && !"".equals(strLOGINEDIT)) {
ad5081d3   孙向锦   初始化项目
607
  			String strLo[] = strLOGINEDIT.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
608
  			if (strLo.length == 2) {
ad5081d3   孙向锦   初始化项目
609
610
611
612
613
  				pd.put("isZhuce", strLo[0]);
  				pd.put("isMusic", strLo[1]);
  			}
  		}
  		try {
bed6e1fc   孙向锦   添加其他功能
614
  			List<PageData> listImg = loginimgService.listAll(pd); // 登录背景图片
ad5081d3   孙向锦   初始化项目
615
616
617
618
619
620
  			pd.put("listImg", listImg);
  		} catch (Exception e) {
  			e.printStackTrace();
  		}
  		return pd;
  	}
bed6e1fc   孙向锦   添加其他功能
621
622
623
624
  
  	/**
  	 * 获取用户权限
  	 * 
ad5081d3   孙向锦   初始化项目
625
626
627
  	 * @param session
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
628
  	public Map<String, String> getUQX(String USERNAME) {
ad5081d3   孙向锦   初始化项目
629
630
631
632
  		PageData pd = new PageData();
  		Map<String, String> map = new HashMap<String, String>();
  		try {
  			pd.put(Const.SESSION_USERNAME, USERNAME);
bed6e1fc   孙向锦   添加其他功能
633
  
ad5081d3   孙向锦   初始化项目
634
  			PageData userpd = new PageData();
bed6e1fc   孙向锦   添加其他功能
635
  			userpd = userService.findByUsername(pd); // 通过用户名获取用户信息
ad5081d3   孙向锦   初始化项目
636
637
  			String ROLE_ID = userpd.get("ROLE_ID").toString();
  			String ROLE_IDS = userpd.getString("ROLE_IDS");
bed6e1fc   孙向锦   添加其他功能
638
639
640
641
642
643
  			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   孙向锦   初始化项目
644
  			List<PageData> buttonQXnamelist = new ArrayList<PageData>();
bed6e1fc   孙向锦   添加其他功能
645
646
647
648
  			if ("admin".equals(USERNAME)) {
  				buttonQXnamelist = fhbuttonService.listAll(pd); // admin用户拥有所有按钮权限
  			} else {
  				if (Tools.notEmpty(ROLE_IDS)) {// (主副职角色综合按钮权限)
ad5081d3   孙向锦   初始化项目
649
650
  					ROLE_IDS = ROLE_IDS + ROLE_ID;
  					String arryROLE_ID[] = ROLE_IDS.split(",fh,");
bed6e1fc   孙向锦   添加其他功能
651
652
653
654
655
  					buttonQXnamelist = buttonrightsService
  							.listAllBrAndQxnameByZF(arryROLE_ID);
  				} else { // (主职角色按钮权限)
  					buttonQXnamelist = buttonrightsService
  							.listAllBrAndQxname(pd); // 此角色拥有的按钮权限标识列表
ad5081d3   孙向锦   初始化项目
656
657
  				}
  			}
bed6e1fc   孙向锦   添加其他功能
658
659
  			for (int i = 0; i < buttonQXnamelist.size(); i++) {
  				map.put(buttonQXnamelist.get(i).getString("QX_NAME"), "1"); // 按钮权限
ad5081d3   孙向锦   初始化项目
660
661
662
  			}
  		} catch (Exception e) {
  			logger.error(e.toString(), e);
bed6e1fc   孙向锦   添加其他功能
663
  		}
ad5081d3   孙向锦   初始化项目
664
665
  		return map;
  	}
bed6e1fc   孙向锦   添加其他功能
666
667
668
669
  
  	/**
  	 * 获取用户权限(处理副职角色)
  	 * 
ad5081d3   孙向锦   初始化项目
670
671
672
  	 * @param session
  	 * @return
  	 */
bed6e1fc   孙向锦   添加其他功能
673
  	public Map<String, List<String>> getUQX2(String USERNAME) {
ad5081d3   孙向锦   初始化项目
674
675
676
677
678
  		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   孙向锦   添加其他功能
679
  			userpd = userService.findByUsername(pd); // 通过用户名获取用户信息
ad5081d3   孙向锦   初始化项目
680
  			String ROLE_IDS = userpd.getString("ROLE_IDS");
bed6e1fc   孙向锦   添加其他功能
681
  			if (Tools.notEmpty(ROLE_IDS)) {
ad5081d3   孙向锦   初始化项目
682
683
684
685
686
687
  				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   孙向锦   添加其他功能
688
  				for (int i = 0; i < arryROLE_ID.length; i++) {
ad5081d3   孙向锦   初始化项目
689
690
691
692
693
694
695
  					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   孙向锦   添加其他功能
696
697
698
699
  				maps.put("addsList", addsList); // 增
  				maps.put("delsList", delsList); // 删
  				maps.put("editsList", editsList); // 改
  				maps.put("chasList", chasList); // 查
ad5081d3   孙向锦   初始化项目
700
701
702
  			}
  		} catch (Exception e) {
  			logger.error(e.toString(), e);
bed6e1fc   孙向锦   添加其他功能
703
  		}
ad5081d3   孙向锦   初始化项目
704
705
  		return maps;
  	}
bed6e1fc   孙向锦   添加其他功能
706
707
708
709
  
  	/**
  	 * 更新登录用户的IP
  	 * 
ad5081d3   孙向锦   初始化项目
710
711
712
  	 * @param USERNAME
  	 * @throws Exception
  	 */
bed6e1fc   孙向锦   添加其他功能
713
  	public void getRemortIP(String USERNAME) throws Exception {
ad5081d3   孙向锦   初始化项目
714
715
716
  		PageData pd = new PageData();
  		HttpServletRequest request = this.getRequest();
  		String ip = "";
bed6e1fc   孙向锦   添加其他功能
717
718
719
720
721
  		if (request.getHeader("x-forwarded-for") == null) {
  			ip = request.getRemoteAddr();
  		} else {
  			ip = request.getHeader("x-forwarded-for");
  		}
ad5081d3   孙向锦   初始化项目
722
723
724
  		pd.put("USERNAME", USERNAME);
  		pd.put("IP", ip);
  		userService.saveIP(pd);
bed6e1fc   孙向锦   添加其他功能
725
726
  	}
  
ad5081d3   孙向锦   初始化项目
727
  }