struts攔截器不推薦使用 建議使用spring AOP 面向切面 統(tǒng)一權(quán)限操作當(dāng)做一類失誤處理 對于數(shù)據(jù)庫權(quán)限 簡單權(quán)限可以設(shè)定一張權(quán)限表 復(fù)雜權(quán)限 但權(quán)限沒有從屬關(guān)系可以使用2進(jìn)制表示 0101010 0和1分別代表是否具有該權(quán)限操作 多級權(quán)限表結(jié)構(gòu)又相應(yīng)復(fù)雜
目前創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、成都網(wǎng)站托管、企業(yè)網(wǎng)站設(shè)計(jì)、攀枝花網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
給你一個簡單的管理代碼
public class CheckIdAdvice implements MethodInterceptor {
protected final Log log = LogFactory.getLog(getClass());
public Object invoke(MethodInvocation invocation) throws Throwable {
String methodName = invocation.getMethod().getName();
for(int i=0;iConstant.levelOneMethod.length;i++)
{
if(Constant.levelOneMethod[i].equals(methodName))
{
Map map=(Map) ActionContext.getContext().get("session");
Admin admin=(Admin)map.get("admin");
if(admin.getQuanxian()!=nulladmin.getQuanxian()=1)
{
return invocation.proceed();
}
else
{
log.info("進(jìn)入失敗");
return false;
}
}
}
for(int i=0;iConstant.levelTwoMethod.length;i++)
{
if(Constant.levelTwoMethod[i].equals(methodName))
{
Map map=(Map) ActionContext.getContext().get("session");
Admin admin=(Admin)map.get("admin");
if(admin.getQuanxian()!=nulladmin.getQuanxian()=3)
{
return invocation.proceed();
}
else
{
log.info("進(jìn)入失敗");
return false;
}
}
}
for(int i=0;iConstant.levelThreeMethod.length;i++)
{
if(Constant.levelThreeMethod[i].equals(methodName))
{
Map map=(Map) ActionContext.getContext().get("session");
Admin admin=(Admin)map.get("admin");
if(admin!=nulladmin.getQuanxian()=5)
{
return invocation.proceed();
}
else
{
log.info("進(jìn)入失敗");
return false;
}
}
}
return invocation.proceed();
}
}
在定義的方法或?qū)ο髷?shù)據(jù)前加上
public(共享的)允許所有的類訪問
private(私有的)僅允許與本身的類訪問
protected(半共享的)允許本身的類訪問并且允許子類訪問
小白一只,說的可能不是很規(guī)范。。。。多多包涵
下面是一個java的web權(quán)限管理模塊的應(yīng)用與實(shí)現(xiàn)。
先介紹數(shù)據(jù)模型和應(yīng)用界面,后繼對實(shí)現(xiàn)細(xì)節(jié)做選擇性闡述。
數(shù)據(jù)表關(guān)系如下:
該圖標(biāo)明了登陸用戶、角色、部門(機(jī)構(gòu))、用戶組、角色和模塊功能之間的關(guān)系。為方便起見,所有表都只保留必要字段。
在本系統(tǒng)設(shè)計(jì)中,如下概念有著相對特殊的含義。
一、用戶(user): 系統(tǒng)的使用者。
二、部門(org):體現(xiàn)了用戶的行政關(guān)系,
三、組(group) :是某相同職能的用戶的集合,可以和用戶一樣與角色產(chǎn)生關(guān)聯(lián)。設(shè)置組的目的是為了方便用戶的角色分配,減少用戶與角色的直接對應(yīng)關(guān)系。用戶的角色可以是其組角色和其直接分配的角色之合集。限于作者的時間和精力,組功能在該系統(tǒng)中沒有具體的實(shí)現(xiàn)。
四、角色(role):角色對應(yīng)著某些功能(function)的集合,被分配一個角色意味著有權(quán)執(zhí)行這些功能。角色表中的字段"functions"記錄相關(guān)的功能id,id之間用逗號隔開。
五、功能(function):系統(tǒng)的一個或者多個執(zhí)行準(zhǔn)入。
在web應(yīng)用中,對頁面的訪問控制通常通過程序來控制,流程為:
登錄 - 設(shè)置session - 訪問受限頁面時檢查session是否存在,如果不存在,禁止訪問
對于較小型的web應(yīng)用,可以通過tomcat內(nèi)置的訪問控制機(jī)制來實(shí)現(xiàn)權(quán)限控制。采用這種機(jī)制的好處是,程序中無需進(jìn)行權(quán)限控制,完全通過對tomcat的配置即可完成訪問控制。
為了在tomcat頁面設(shè)置訪問權(quán)限控制,在項(xiàng)目的WEB-INFO/web.xml文件中,進(jìn)行如下設(shè)置:
Java代碼 復(fù)制代碼
1. web-app
2. !--servlet等其他配置--
3. security-constraint
4. web-resource-collection
5. web-resource-nameMy Test/web-resource-name
6. url-pattern/admin/*/url-pattern
7. /web-resource-collection
8. auth-constraint
9. role-namerole1/role-name
10. role-nametomcat/role-name
11. /auth-constraint
12. /security-constraint
13. login-config
14. auth-methodBASIC/auth-method
15. realm-nameMy Test/realm-name
16. /login-config
web-app
!--servlet等其他配置--
security-constraint
web-resource-collection
web-resource-nameMy Test/web-resource-name
url-pattern/admin/*/url-pattern
/web-resource-collection
auth-constraint
role-namerole1/role-name
role-nametomcat/role-name
/auth-constraint
/security-constraint
login-config
auth-methodBASIC/auth-method
realm-nameMy Test/realm-name
/login-config
其中,url-pattern中指定受限的url,可以使用通配符*,通常對整個目錄進(jìn)行訪問權(quán)限控制。
auth-constraint中指定哪些角色可以訪問url-pattern指定的url,在role-name中可以設(shè)置一個或多個角色名。
使用的角色名來自tomcat的配置文件$/conf/tomcat-users.xml。
login-config中設(shè)置登錄方式,auth-method的取值為BASIC或FORM。如果為BASIC,瀏覽器在需要登錄時彈出一個登錄窗口。如果為FORM方式,需要指定登錄頁面和登錄失敗時的提示信息顯示頁面。
使用FORM方式的配置樣例如下:
Java代碼 復(fù)制代碼
1. login-config
2. auth-methodFORM/auth-method
3. realm-nameExample Form-Based Authentication Area/realm-name
4. form-login-config
5. form-login-page/login.jsp/form-login-page
6. form-error-page/error.jsp/form-error-page
7. /form-login-config
8. /login-config
login-config
auth-methodFORM/auth-method
realm-nameExample Form-Based Authentication Area/realm-name
form-login-config
form-login-page/login.jsp/form-login-page
form-error-page/error.jsp/form-error-page
/form-login-config
/login-config
其中的form-login-page指定登錄頁面url,form-error-page指定登錄失敗時的提示頁面url。
登錄頁面中,form的action,以及其中的用戶名和密碼兩個參數(shù)的名稱,都應(yīng)取固定的值。登錄的后臺處理程序?yàn)閖_security_check;用戶名和密碼的參數(shù)名稱分別為:j_username和j_password。
如下是登錄頁面(如:login.jsp)的一段示例代碼:
Java代碼 復(fù)制代碼
1. form method="POST" action='%= response.encodeURL("j_security_check") %'
2. table border="0" cellspacing="5"
3. tr
4. th align="right"Username:/th
5. td align="left"input type="text" name="j_username"/td
6. /tr
7. tr
8. th align="right"Password:/th
9. td align="left"input type="password" name="j_password"/td
10. /tr
11. tr
12. td align="right"input type="submit" value="Log In"/td
13. td align="left"input type="reset"/td
14. /tr
15. /table/form