struts2實現登錄用戶的簡單的權限設置
聲明:由于代碼過多,之摘下了添加用戶權限和用戶登錄后所顯示各自各有那些權限
一:所需的數據庫表和sql語句
--創建權限表 create table system.purview ( pvalue number(3)primary key, pname varchar2(20), pmodule varchar2(20) );insert into system.purview values(1,'添加','新聞'); insert into system.purview values(2,'修改','新聞'); insert into system.purview values(3,'刪除','新聞'); insert into system.purview values(4,'查詢','新聞');
insert into system.purview values(5,'添加','公告'); insert into system.purview values(6,'修改','公告'); insert into system.purview values(7,'刪除','公告'); insert into system.purview values(8,'查詢','公告');
--創建角色表 create table system.roler ( id varchar2(20)primary key, rid varchar2(20), rname varchar2(20) );
create sequence system.roler_sequence start with 1 increment by 1 nomaxvalue cache 20;
create trigger system.roler_trigger before insert on system.roler for each row when(new.id is null) begin select system.roler_sequence.nextval into:new.id from dual; end;</pre>
1)roler表
2)purview表
二:添加權限
1)添加角色jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@page isELIgnored="false" %> <%@taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>
</head>
<body>
<form action="rolerInsertDo.action" method="post"> 角色名<input type="text" name="rname"/> <BR></BR>權限 <table border="1"> <tr><td >新聞</td><td> <table border="1"> <tr> <s:iterator value="purviewList" var="pur">
<s:if test="${pur.pmodule=='新聞'}"> <td><input type="checkbox" name="purview" value="${pur.pvalue}"/>${pur.pname }</td> </s:if>
</s:iterator> </tr> </table>
</td></tr>
<tr><td>公告</td><td> <table border="1"> <tr> <s:iterator value="purviewList" var="pur">
<s:if test="${pur.pmodule=='公告'}"> <td><input type="checkbox" name="purview" value="${pur.pvalue}"/>${pur.pname }</td> </s:if>
</s:iterator> </tr> </table>
</td></tr>
</table> <input type="submit"value="提交"/> </form> </body>
</html></pre>
2)添加角色actionpublic String insertDo() { //獲得角色名稱和權限值 int p[]=roler.getPurview(); //調用service層 rolerService=new InsertRolerService(); int flag= rolerService.insert(roler); return SUCCESS; }
3)添加角色servicepublic int insert(InsertRolerBean roler){//開始連接數據庫 dbcon=new DBConnection(); sta=dbcon.getSta(); //取出所有選 中的權限值,生成最終的權限值 long sum=0; for(int i=0;i<roler.getPurview().length;i++){ sum+=Math.pow(2, roler.getPurview()[i]);//getPurview是事先聲明好的get和set方法,此數組用來接收前臺所選的權限,Math.pow此發放為權限算法 } sql="insert into roler(rid,rname) values("+sum+",'"+roler.getRname()+"')"; try { flag=sta.executeUpdate(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return flag; }</pre>三:根據用戶查看此用戶所具有的權限 <p></p>
1)查看用戶所具有的權限頁面
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@page isELIgnored="false" %> <%@taglib uri="/struts-tags" prefix="s" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head>
</head>
<body> <form action="checkRoler" method="post"> 用戶名:<input type="text" name="rname"> <input type="submit" value="登錄"> </form> </body>
</html></pre>
2)查詢用戶所具有的權限actionpublic String getByName(){ String name=roler.getRname(); //System.out.println("name-------------->"+name); purviewService=new RolerService(); roler=purviewService.getByRname(name); long rid=roler.getRid(); System.out.println("rid------------->"+rid);purviewList=purviewService.getAll(); lis=purviewService.getRoler(purviewList,rid); lis=purviewService.getQX(lis); return "success"; }</pre><br />
3)查詢用戶所具有的權限service
a).getByRname方法,用來根據所登用戶的名稱得到rid字段
public InsertRolerBean getByRname(String rname){ dbcon=new DBConnection(); sta=dbcon.getSta();sql="select id,rid,rname from roler t where t.rname='"+rname+"'"; try { rs=sta.executeQuery(sql); while(rs.next()){ rb=new InsertRolerBean(); rb.setId(rs.getInt("id")); rb.setRid(rs.getLong("rid")); rb.setRname(rs.getString("rname")); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rb; }</pre>b).getAll()方法用來得到所有權限名稱 <p></p>
public List getAll(){ purviewList=new ArrayList(); //開始連接數據庫 dbcon=new DBConnection(); sta=dbcon.getSta(); sql="select pvalue,pname,pmodule from purview";try { rs=sta.executeQuery(sql); //循環打包 while(rs.next()){ RolerBean pur=new RolerBean(); pur.setPvalue(rs.getInt("pvalue")); pur.setPname(rs.getString("pname")); pur.setPmodule(rs.getString("pmodule")); purviewList.add(pur); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ dbcon.close(); } return purviewList; }</pre><br />
c).getRoler()方法,用來得到登錄用戶所具有的權限
public List getRoler(List lis,long rid){ //System.out.println("lisSize-------------->"+lis.size());purviewList=new ArrayList(); for(int i=1;i<=lis.size();i++){ long cou=(long) Math.pow(2,i);//將purview表中的pvalue字段進行權限算法 System.out.println("cou------------>"+cou); long fh=cou&rid;//將權限與用所具有的權限算法進行對比,如果為零則沒有這個權限反之具有折個權限 if(fh!=0){ purviewList.add(i); } //System.out.println(cou); } return purviewList; }</pre> <p>d)getQX()方法:</p>
public List getQX(List lis){ String str=lis.toString(); String tr=str.substring(1,str.length()-1);//截取已轉型成String的List集合中的數字 purviewList=new ArrayList(); dbcon=new DBConnection(); sta=dbcon.getSta(); sql="select pvalue,pname,pmodule from purview where pvalue in("+tr+")";//System.out.println("hello---------->"+i); try { rs=sta.executeQuery(sql); while(rs.next()){ rob=new RolerBean(); rob.setPvalue(rs.getInt("pvalue")); rob.setPname(rs.getString("pname")); rob.setPmodule(rs.getString("pmodule")); purviewList.add(rob); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return purviewList; }</pre><br />
四:圖例
1)添加角色圖例:
數據庫表見前邊的圖
2)查看用戶所具有的權限圖例:
例如輸入上圖中admin則會顯示如下圖的權限:
如果輸入tianyi則會顯示下圖的權限:
后記:對權限的算法只是知道一點皮毛,這些權限是少的權限,如果成百個的權限照我的這個算法感覺效率很低,并且可能有效長度不夠,希望有對權限熟悉的朋友給個建議或例子(例子最好,不要太復雜的,越簡單越好,謝謝),大家共同學習..............
轉自:http://blog.csdn.net/wangzihu/article/details/7653244