首页>代码>java设计好的后台权限管理的系统>/security/src/main/java/com/ketayao/security/controller/IndexController.java
/**
 * <pre>
 * Copyright:		Copyright(C) 2011-2012, ketayao.com
 * Filename:		com.ygsoft.security.controller.IndexController.java
 * Class:			IndexController
 * Date:			2012-8-2
 * Author:			<a href="mailto:ketayao@gmail.com">ketayao</a>
 * Version          1.1.0
 * Description:		
 *
 * </pre>
 **/
 
package com.ketayao.security.controller;

import java.util.List;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.ketayao.security.SecurityConstants;
import com.ketayao.security.entity.main.Module;
import com.ketayao.security.entity.main.User;
import com.ketayao.security.entity.main.UserRole;
import com.ketayao.security.service.ModuleService;
import com.ketayao.security.service.UserRoleService;
import com.ketayao.security.service.UserService;
import com.ketayao.security.shiro.ShiroDbRealm;
import com.ketayao.util.dwz.AjaxObject;

/** 
 * 	
 * @author 	<a href="mailto:ketayao@gmail.com">ketayao</a>
 * Version  1.1.0
 * @since   2012-8-2 下午5:45:57 
 */
@Controller
@RequestMapping("/management/index")
public class IndexController {
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private UserRoleService userRoleService;
	
	@Autowired
	private ModuleService moduleService;
	
	private static final String INDEX = "management/index/index";
	private static final String UPDATE_PASSWORD = "management/index/updatePwd";
	private static final String UPDATE_BASE = "management/index/updateBase";
	
	@RequiresAuthentication 
	@RequestMapping(value="", method=RequestMethod.GET)
	public String index(HttpServletRequest request) {
		Subject subject = SecurityUtils.getSubject();
		ShiroDbRealm.ShiroUser shiroUser = (ShiroDbRealm.ShiroUser)subject.getPrincipal();
		
		//User user = userService.get(shiroUser.getLoginName());
		List<UserRole> userRoles = userRoleService.find(shiroUser.getId());
		shiroUser.getUser().setUserRoles(userRoles);
		
		Module menuModule = getMenuModule(userRoles);

		// 这个是放入user还是shiroUser呢?
		request.getSession().setAttribute(SecurityConstants.LOGIN_USER, shiroUser.getUser());
		request.setAttribute("menuModule", menuModule);
		return INDEX;
	}
	
	private Module getMenuModule(List<UserRole> userRoles) {
		// 得到所有权限
		Set<String> permissionSet = Sets.newHashSet();
		for (UserRole userRole : userRoles) {
			Set<String> tmp = Sets.newHashSet(userRole.getRole().getPermissionList());
			permissionSet.addAll(tmp);
		}
		
		// 组装菜单,只获取二级菜单
		//Module rootModule = moduleService.get(1L);
		Module rootModule = moduleService.getTree();
		List<Module> list1 = Lists.newArrayList();
		for (Module m1 : rootModule.getChildren()) {
			// 只加入拥有view权限的Module
			if (permissionSet.contains(m1.getSn() + ":" + SecurityConstants.OPERATION_VIEW)) {
				List<Module> list2 = Lists.newArrayList();
				for (Module m2 : m1.getChildren()) {
					if (permissionSet.contains(m2.getSn() + ":" + SecurityConstants.OPERATION_VIEW)) {
						list2.add(m2);
					}
				}
				m1.setChildren(list2);
				list1.add(m1);
			}
		}
		rootModule.setChildren(list1);
		
		return rootModule;
	}
	
	@RequestMapping(value="/updatePwd", method=RequestMethod.GET)
	public String updatePassword() {
		return UPDATE_PASSWORD;
	}
	
	@RequestMapping(value="/updatePwd", method=RequestMethod.POST)
	public @ResponseBody String updatePassword(HttpServletRequest request, String oldPassword, 
			String plainPassword, String rPassword) {
		User user = (User)request.getSession().getAttribute(SecurityConstants.LOGIN_USER);
		
		if (plainPassword.equals(rPassword)) {
			user.setPlainPassword(plainPassword);
			userService.update(user);
			
			AjaxObject ajaxObject = new AjaxObject("密码修改成功!");
			return ajaxObject.toString();
		}
		
		AjaxObject ajaxObject = new AjaxObject("密码修改失败!");
		ajaxObject.setStatusCode(AjaxObject.STATUS_CODE_FAILURE);
		ajaxObject.setCallbackType("");
		return ajaxObject.toString();
	}
	
	@RequestMapping(value="/updateBase", method=RequestMethod.GET)
	public String preUpdate() {
		return UPDATE_BASE;
	}
	
	@RequestMapping(value="/updateBase", method=RequestMethod.POST)
	public @ResponseBody String update(User user, HttpServletRequest request) {
		User loginUser = (User)request.getSession().getAttribute(SecurityConstants.LOGIN_USER);
		
		loginUser.setPhone(user.getPhone());
		loginUser.setEmail(user.getEmail());

		userService.update(loginUser);

		AjaxObject ajaxObject = new AjaxObject("详细信息修改成功!");
		return ajaxObject.toString();
	}
}
最近下载更多
3127857649  LV1 2023年3月3日
WZW555  LV1 2022年5月18日
lsq54365  LV14 2021年11月13日
shaven  LV2 2021年7月1日
yuting Wang  LV9 2021年5月13日
你是傻子  LV9 2021年1月19日
zhang5  LV2 2020年12月26日
落轩昂  LV12 2020年9月24日
我是最靓的仔  LV1 2020年9月2日
didiaoD  LV4 2020年8月19日
最近浏览更多
ww0408  LV1 2023年12月28日
Ji123455  LV8 2023年9月21日
 LV7 2023年8月28日
飞呀飞呀飞不放  LV7 2023年8月9日
胡修洋 2023年6月5日
暂无贡献等级
3127857649  LV1 2023年3月3日
xser3366  LV5 2023年2月7日
cxr2008  LV2 2022年12月13日
xudong_y  LV4 2022年10月27日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友