struts2實現登錄用戶的簡單的權限設置

openkk 12年前發布 | 25K 次閱讀 Struts2 Web框架

聲明:由于代碼過多,之摘下了添加用戶權限和用戶登錄后所顯示各自各有那些權限

一:所需的數據庫表和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表

struts2實現登錄用戶的簡單的權限設置

2)purview表

struts2實現登錄用戶的簡單的權限設置

二:添加權限

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)添加角色action

public String insertDo() {
        //獲得角色名稱和權限值
         int p[]=roler.getPurview();
         //調用service層 
         rolerService=new InsertRolerService();
        int flag= rolerService.insert(roler);
        return SUCCESS;
    }

3)添加角色service

public 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)查詢用戶所具有的權限action

public 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)添加角色圖例:

struts2實現登錄用戶的簡單的權限設置

數據庫表見前邊的圖

2)查看用戶所具有的權限圖例:

struts2實現登錄用戶的簡單的權限設置

例如輸入上圖中admin則會顯示如下圖的權限:

struts2實現登錄用戶的簡單的權限設置

如果輸入tianyi則會顯示下圖的權限:

struts2實現登錄用戶的簡單的權限設置

后記:對權限的算法只是知道一點皮毛,這些權限是少的權限,如果成百個的權限照我的這個算法感覺效率很低,并且可能有效長度不夠,希望有對權限熟悉的朋友給個建議或例子(例子最好,不要太復雜的,越簡單越好,謝謝),大家共同學習..............

轉自:http://blog.csdn.net/wangzihu/article/details/7653244

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!