1 springmvc 权限控制中写的一个小小的工具类1
?
package com.er07.book.springmvc.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Service;import com.er07.book.springmvc.dao.RightDao;import com.er07.book.springmvc.model.Right;import com.er07.book.springmvc.service.RightService;import com.er07.book.springmvc.util.StringUtil;import com.er07.book.springmvc.util.ValidateUtil;/** * 权限管理 * @version 1.0 @author 高元东 * I'm glad to share with you my learning techniques! * @mailto 466862016@qq.com * 2013-3-11 */@Servicepublic class RightServiceImpl implements RightService {@Resourceprivate RightDao rightDao;/** * 保存或者更新权限 根据要求生成权限码 * @mailto 466862016@qq.com * @param right */public void saveOrUpdateRight(Right right) {long rightCode =1l;int rightPos =0;//是否插入if(right.getId()==null) { String hql ="select max(r.rightPos),max(r.rightCode) from Right r where r.rightPos = (select max(rr.rightPos) from Right rr)"; Object[] obj = (Object[]) this.rightDao.uniqueResult(hql); Integer topPos = (Integer) obj[0]; Long topCode = (Long) obj[1]; if(topPos==null) { rightCode = 1; rightPos = 0; } else { //达到没有最大值吗? if(topCode>=1l<<60) {//达到最大值 rightPos = topPos+1; rightCode =1l; } else { //没有达到最大值 rightCode = topCode<<1; rightPos = topPos; } } //设置 权限位和权限码 保存在数据库中 right.setRightCode(rightCode); right.setRightPos(rightPos); }this.rightDao.saveOrUpdateEntity(right);}/** * 通过 url 增加或修改权限 */public void appendRightByUrl(String url) {//查询 此url 在数据库中是否存在 此权限String hql = "from Right where rightUrl =?";Right r = (Right) this.rightDao.uniqueResult(hql, url);if(r==null) { //不存在 , 插入数据库中Right newRight = new Right();newRight.setRightUrl(url);this.saveOrUpdateRight(newRight);}}/** * 查找在指定范围内的 权限集合 */public List<Right> findRangeRight(Integer[] ownRightIds) {if(!ValidateUtil.isValid(ownRightIds)) {return null;} else {String hql = "from Right where id in("+StringUtil.arr2Str(ownRightIds)+")";List<Right> rights = this.rightDao.findEntityByHQL(hql);return rights;}}/*** * 查找所有权限 */public List<Right> findAllRights() {return this.rightDao.findEntityByHQL("from Right");}/** * 查找最大的权限位 */public int findMaxRightPos() {String hql ="select max(rightPos) from Right";Integer max = (Integer) this.rightDao.uniqueResult(hql); return max==null?0:max;}}
?