1. html 怎麼在前端實現角色許可權控制
html在前端實現角色許可權控制操作:
1、框架提供了按鈕許可權的擴展服務,我們可以通過簡單的擴展來注冊我們自己的許可權項,我們通過繼承AbstractMenuPriv來實現我們的按鈕許可權類;
2. ssm框架訪問控制應該怎麼做
這個就在在人員表了添加一個身份的欄位 user_rank ,用這個來控制。用戶登錄到時候就會用登錄信息,把這個 user_rank 欄位帶出來,在頁面或者鏈接時候加上判斷,哈這是簡單的,看下官方的。
shiro安全框架是目前為止作為登錄注冊最常用的框架,因為它十分的強大簡單,提供了認證、授權、加密和會話管理等功能 。
shiro能做什麼?
認證:驗證用戶的身份
授權:對用戶執行訪問控制:判斷用戶是否被允許做某事
會話管理:在任何環境下使用 Session API,即使沒有 Web 或EJB 容器。
加密:以更簡潔易用的方式使用加密功能,保護或隱藏數據防止被偷窺
Realms:聚集一個或多個用戶安全數據的數據源
單點登錄(SSO)功能。
為沒有關聯到登錄的用戶啟用 "Remember Me「 服務
Shiro 的四大核心部分
Authentication(身份驗證):簡稱為「登錄」,即證明用戶是誰。
Authorization(授權):訪問控制的過程,即決定是否有許可權去訪問受保護的資源。
Session Management(會話管理):管理用戶特定的會話,即使在非 Web 或 EJB 應用程序。
Cryptography(加密):通過使用加密演算法保持數據安全
shiro的三個核心組件:
Subject:正與系統進行交互的人,或某一個第三方服務。所有 Subject 實例都被綁定到(且這是必須的)一個SecurityManager 上。
SecurityManager:Shiro 架構的心臟,用來協調內部各安全組件,管理內部組件實例,並通過它來提供安全管理的各種服務。當 Shiro 與一個 Subject 進行交互時,實質上是幕後的 SecurityManager 處理所有繁重的 Subject 安全操作。
Realms:本質上是一個特定安全的 DAO。當配置 Shiro 時,必須指定至少一個 Realm 用來進行身份驗證和/或授權。Shiro 提供了多種可用的 Realms 來獲取安全相關的數據。如關系資料庫(JDBC),INI 及屬性文件等。可以定義自己 Realm 實現來代表自定義的數據源。
shiro整合SSM框架:
1.加入 jar 包:以下jar包自行網路下載
准備好了,接下來要寫Realm方法了,新建shiro包,在包下新建MyRealm.java文件繼承AuthorizingRealm
package shiro;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.SimpleAuthenticationInfo;import org.apache.shiro.authc.credential.HashedCredentialsMatcher;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.authz.SimpleAuthorizationInfo;import org.apache.shiro.crypto.hash.Md5Hash;import org.apache.shiro.crypto.hash.SimpleHash;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import org.apache.shiro.util.ByteSource;import org.springframework.beans.factory.annotation.Autowired;import bean.user;import .user;public class MyRealm extends AuthorizingRealm {
@Autowired private user user;
String pass; /**
* 授權:
*
*/
@Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
Object principal = principalCollection.getPrimaryPrincipal();//獲取登錄的用戶名
if("admin".equals(principal)){ //兩個if根據判斷賦予登錄用戶許可權
info.addRole("admin");
} if("user".equals(principal)){
info.addRole("list");
}
info.addRole("user");
return info;
} /*
* 用戶驗證
*
*/
@Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//1. token 中獲取登錄的 username! 注意不需要獲取password.
Object principal = token.getPrincipal();
//2. 利用 username 查詢資料庫得到用戶的信息.
user user=user.findbyname((String) principal); if(user!=null){
pass=user.getPass();
}
String credentials = pass; //3.設置鹽值 ,(加密的調料,讓加密出來的東西更具安全性,一般是通過資料庫查詢出來的。 簡單的說,就是把密碼根據特定的東西而進行動態加密,如果別人不知道你的鹽值,就解不出你的密碼)
String source = "abcdefg";
ByteSource credentialsSalt = new Md5Hash(source);
//當前 Realm 的name
String realmName = getName(); //返回值實例化
SimpleAuthenticationInfo info =
new SimpleAuthenticationInfo(principal, credentials,
credentialsSalt, realmName);
return info;
} //init-method 配置.
public void setCredentialMatcher(){
HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
credentialsMatcher.setHashAlgorithmName("MD5");//MD5演算法加密
credentialsMatcher.setHashIterations(1024);//1024次循環加密
setCredentialsMatcher(credentialsMatcher);
}
//用來測試的算出密碼password鹽值加密後的結果,下面方法用於新增用戶添加到資料庫操作的,我這里就直接用main獲得,直接資料庫添加了,省時間
public static void main(String[] args) {
String saltSource = "abcdef";
String hashAlgorithmName = "MD5";
String credentials = "passwor";
Object salt = new Md5Hash(saltSource); int hashIterations = 1024;
Object result = new SimpleHash(hashAlgorithmName, credentials, salt, hashIterations);
System.out.println(result);
}
}
好了,接下來我們寫一個簡單的action來通過shiro登錄驗證。
//登錄認證
@RequestMapping("/shiro-login") public String login(@RequestParam("username") String username,
@RequestParam("password") String password){
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
try { //執行認證操作. subject.login(token);
}catch (AuthenticationException ae) {
System.out.println("登陸失敗: " + ae.getMessage()); return "/index";
}
return "/shiro-success";
}
//溫馨提示:記得在注冊中密碼存入資料庫前也記得加密哦,提供一個utils方法//進行shiro加密,返回加密後的結果public static String md5(String pass){
String saltSource = "blog";
String hashAlgorithmName = "MD5";
Object salt = new Md5Hash(saltSource);int hashIterations = 1024;
Object result = new SimpleHash(hashAlgorithmName, pass, salt, hashIterations);
String password = result.toString();return password;
}
好了,shiro登錄驗證到這里完了
3. 怎麼樣實現基於Web的許可權管理框架功能
解決復雜的許可權管理問題的過程可以抽象概括為:判斷【Who是否可以對What進行How的訪問操作(Operator)】這個邏輯表達式的值是否為True的求解過程。這里涉及的相關概念說明如下:
l Who:許可權的擁有者或主體。典型的有Principal、User、Group、Role、Actor等等。本框架的訪問控制方法會採用「基於角色的訪問控制(主,公認的有效方法)+ 針對個別用戶的訪問控制(輔,增加靈活性) + 用戶組」(這一點參見[訪問控制方法的考慮]一節),所以直接跟授權有關系的實體就只有角色(Role)和用戶(User)。譬如:業務經理(Role),張三(User)
l What:許可權針對的資源(Resource)(包括資源類別(the type of Resource)和資源實例(the instance of Resource))。譬如:報表。
l How:亦作action,表示某種訪問方法(亦請參考Operator條目解釋)。譬如:刪除。
l Operator:操作。表示施加於What的How動作。是一種Resource Related的概念,單獨的How動作是沒有實際意義的,譬如:刪除;只有與具體資源結合在一起才有意義,譬如:刪除報表。
4. 構建單頁面應用前端人員需要哪些方法
所謂單頁應用,指的是在一個頁面上集成多種功能,甚至整個系統就只有一個頁面,所有的業務功能都是它的子模塊,通過特定的方式掛接到主界面上。它是AJAX技術的進一步升華,把AJAX的無刷新機制發揮到極致,因此能造就與桌面程序媲美的流暢用戶體驗。
開發框架
ExtJS可以稱為第一代單頁應用框架的典型,它封裝了各種UI組件,用戶主要使用JavaScript來完成整個前端部分,甚至包括布局。隨著功能逐漸增加,ExtJS的體積也逐漸增大,即使用於內部系統的開發,有時候也顯得笨重了,更不用說開發以上這類運行在互聯網上的系統。
jQuery由於偏重DOM操作,它的插件體系又比較鬆散,所以比ExtJS這個體系更適合開發在公網運行的單頁系統,整個解決方案會相對比較輕量、靈活。
但由於jQuery主要面向上層操作,它對代碼的組織是缺乏約束的。如何在代碼急劇膨脹的情況下控制每個模塊的內聚性,並且適當在模塊之間產生數據傳遞與共享,就成為了一種有挑戰的事情。
為了解決單頁應用規模增大時候的代碼邏輯問題,出現了不少MV*框架,他們的基本思路都是在JS層創建模塊分層和通信機制。有的是MVC,有的是MVP,有的是MVVM,而且,它們幾乎都在這些模式上產生了變異,以適應前端開發的特點。
這類框架包括Backbone,Knockout,AngularJS,Avalon等。
組件化
這些在前端做分層的框架推動了代碼的組件化,所謂組件化,在傳統的Web產品中,更多的指UI組件,但其實組件是一個廣泛概念,傳統Web產品中UI組件佔比高的原因是它的厚度不足,隨著客戶端代碼比例的增加,相當一部分的業務邏輯也前端化,由此催生了很多非界面型組件的出現。
分層帶來的一個優勢是,每層的職責更專一了,由此,可以對其作單元測試的覆蓋,以保證其質量。傳統UI層測試最頭疼的問題是UI層和邏輯混雜在一起,比如往往會在遠程請求的回調中更改DOM,當引入分層之後,這些東西都可以分別被測試,然後再通過場景測試來保證整體流程。
代碼隔離
與開發傳統頁面型網站相比,實現單頁應用的過程中,有一些比較值得特別關注的點。
從單頁應用的特點來看,它比頁面型網站更加依賴於JavaScript,而由於頁面的單頁化,各種子功能的JavaScript代碼聚集到了同一個作用域,所以代碼的隔離、模塊化變得很重要。
在單頁應用中,頁面模板的使用是很普遍的。很多框架內置了特定的模板,也有的框架需要引入第三方的模板。這種模板是界面片段,我們可以把它們類比成JavaScript模塊,它們是另一種類型的組件。
模板也一樣有隔離的需要。不隔離模板,會造成什麼問題呢?模板間的沖突主要存在於id屬性上,如果一個模板中包含固定的id,當它被批量渲染的時候,會造成同一個頁面的作用域中出現多個相同id的元素,產生不可預測的後果。因此,我們需要在模板中避免使用id,如果有對DOM的訪問需求,應當通過其他選擇器來完成。如果一個單頁應用的組件化程度非常高,很可能整個應用中都沒有元素id的使用。
代碼合並與載入策略
人們對於單頁系統的載入時間容忍度與Web頁面不同,如果說他們願意為購物頁面的載入等待3秒,有可能會願意為單頁應用的首次載入等待5-10秒,但在此之後,各種功能的使用應當都比較流暢,所有子功能頁面盡量要在1-2秒時間內切換成功,否則他們就會感覺這個系統很慢。
從這些特點來看,我們可以把更多的公共功能放到首次載入,以減小每次載入的載入量,有一些站點甚至把所有的界面和邏輯全部放到首頁載入,每次業務界面切換的時候,只產生數據請求,因此它的響應是非常迅速的,比如青雲的控制台就是這么做的。
通常在單頁應用中,無需像網站型產品一樣,為了防止文件載入阻塞渲染,把js放到html後面載入,因為它的界面基本都是動態生成的。
當切換功能的時候,除了產生數據請求,還需要渲染界面,這個新渲染的界面部件一般是界面模板,它從哪裡來呢?來源無非是兩種,一種是即時請求,像請求數據那樣通過AJAX獲取過來,另一種是內置於主界面的某些位置,比如script標簽或者不可見的textarea中,後者在切換功能的時候速度有優勢,但是加重了主頁面的負擔。
在傳統的頁面型網站中,頁面之間是互相隔離的,因此,如果在頁面間存在可復用的代碼,一般是提取成單獨的文件,並且可能會需要按照每個頁面的需求去進行合並。單頁應用中,如果總的代碼量不大,可以整體打包一次在首頁載入,如果大到一定規模,再作運行時載入,載入的粒度可以搞得比較大,不同的塊之間沒有重復部分。
路由與狀態的管理
管理路由的目的是什麼呢?是為了能減少用戶的導航成本。比如說我們有一個功能,經歷過多次導航菜單的點擊,才呈現出來。如果用戶想要把這個功能地址分享給別人,他怎麼才能做到呢?
傳統的頁面型產品是不存在這個問題的,因為它就是以頁面為單位的,也有的時候,服務端路由處理了這一切。但是在單頁應用中,這成為了問題,因為我們只有一個頁面,界面上的各種功能區塊是動態生成的。所以我們要通過對路由的管理,來實現這樣的功能。
具體的做法就是把產品功能劃分為若干狀態,每個狀態映射到相應的路由,然後通過pushState這樣的機制,動態解析路由,使之與功能界面匹配。
有了路由之後,我們的單頁面產品就可以前進後退,就像是在不同頁面之間一樣。
其實在Web產品之外,早就有了管理路由的技術方案,Adobe Flex中,就會把比如TabNavigator,甚至下拉框的選中狀態對應到url上,因為它也是單「頁面」的產品模式,需要面對同樣的問題。
緩存與本地存儲
在單頁應用的運作機制中,緩存是一個很重要的環節。
由於這類系統的前端部分幾乎全是靜態文件,所以它能夠有機會利用瀏覽器的緩存機制,而比如動態載入的界面模板,也完全可以做一些自定義的緩存機制,在非首次的請求中直接取緩存的版本,以加快載入速度。
甚至,也出現了一些方案,在動態載入JavaScript代碼的同時,把它們也緩存起來。比如Addy Osmani的這個basket.js,就利用了HTML5 localStorage作了js和css文件的緩存。
在單頁產品中,業務代碼也常常會需要跟本地存儲打交道,存儲一些臨時數據,可以使用localStorage或者localStorageDB來簡化自己的業務代碼。
服務端通信
傳統的Web產品通常使用JSONP或者AJAX這樣的方式與服務端通信,但在單頁Web應用中,有很大一部分採用WebSocket這樣的實時通訊方式。
WebSocket與傳統基於HTTP的通信機制相比,有很大的優勢。它可以讓服務端很便利地使用反向推送,前端只響應確實產生業務數據的事件,減少一遍又一遍無意義的AJAX輪詢。
由於WebSocket只在比較先進的瀏覽器上被支持,有一些庫提供了在不同瀏覽器中的兼容方案,比如http://socket.io,它在不支持WebSocket的瀏覽器上會降級成使用AJAX或JSONP等方式,對業務代碼完全透明、兼容。
內存管理
傳統的Web頁面一般是不需要考慮內存的管理的,因為用戶的停留時間相對少,即使出現內存泄漏,可能很快就被刷新頁面之類的操作沖掉了,但單頁應用是不同的,它的用戶很可能會把它開一整天,因此,我們需要對其中的DOM操作、網路連接等部分格外小心。
樣式的規劃
樣式規劃主要是幾個方面:
基準樣式的分離
這裡面主要包括瀏覽器樣式的重設、全局字體的設置、布局的基本約定和響應式支持。
組件樣式的劃分
這裡面是兩個層面的規劃,首先是各種界面組件及其子元素的樣式,其次是一些修飾樣式。組件樣式應當盡量減少互相依賴,各組件的樣式允許冗餘。
堆疊次序的管理
傳統Web頁面的特點是元素多,但是層次少,單頁應用會有些不同。
5. 請問單頁網站怎麼製作輸入卡密獲得訪問子網頁許可權
如果你的網站空間只支持前端語言,也就是HTML、js、css這些,你可以這樣做。將訪客與對應的邀請碼以文本文件的形式存儲為本地文件,然後使用js讀取,並取得使用get或者post提交的用戶填寫的邀請碼,判斷即可。
如果你的網站支持後端語言,那就更簡單了,搞個資料庫,把訪客信息和邀請碼存進去,前端提交邀請碼,後端接收並查詢資料庫資料,判斷是不是正確的。
6. windows操作系統的訪問控制策略基於何種策略
自主訪問控制。
自主訪問控制指對某個客體具有擁有權(或控制權)的主體能夠將對該客體的一種訪問權或多種訪問權自主地授予其它主體,並在隨後的任何時刻將這些許可權回收。
這種控制是自主的,也就是指具有授予某種訪問權力的主體(用戶)能夠自己決定是否將訪問控制許可權的某個子集授予其他的主體或從其他主體那裡收回他所授予的訪問許可權。自主訪問控制中,用戶可以針對被保護對象制定自己的保護策略。
(6)單頁框架怎麼實現訪問控制擴展閱讀
訪問控制的實現機制建立訪問控制模型和實現訪問控制都是抽象和復雜的行為,實現訪問的控制不僅要保證授權用戶使用的許可權與其所擁有的許可權對應,制止非授權用戶的非授權行為;還要保證敏感信息的交叉感染。
以文件的訪問控制為例對訪問控制的實現做具體說明。通常用戶訪問信息資源(文件或是資料庫),可能的行為有讀、寫和管理。用Read或是R表示讀操作,Write或是W表示寫操作,Own或是O表示管理操作。
之所以將管理操作從讀寫中分離出來,是因為管理員也許會對控制規則本身或是文件的屬性等做修改,也就是修改我們在下面提到的訪問控製表。
7. windows如何實現強制訪問控制
windows沒有辦法實行強制訪問控制,它就是一個二級的系統,只能實現自主訪問控制,如果非要實行強制訪問控制,必須愛用一些第三方的工具
據我所知,目前國內的系統都是二級系統,包括windows、linux和unix,都達不到三級標准,僅依靠系統本身是實現不了強制訪問控制的
8. 如何控制HTML頁面的訪問許可權
將上述文件保存為後綴為vbs的文檔,當你在資源管理器中雙擊該文檔時,資源管理器通過查找注冊表,發現該文件類型已與windows scripting Host 關聯,因此調用WHS,並將文件名傳入。WHS從文件開頭執行,忽略掉注釋文本。對這個例子來說,是從WSCript.Echo GetIP 處執行。
這樣就引發了對函數GetIP的調用。WSH在當前腳本內找到該函數,執行,並將結果作為參數傳給WSCript.Echo,顯示後結束。Echo是對象WSCript的一個方法,當腳本以這種方式執行時,它以Messagebox的方式輸出文本。當腳本在命令行方式下,以CScript.exe命令執行時,輸出到控制台。
9. php 寫框架時如何實現url:/控制器/方法來訪問頁面
假設 控制器名字叫做web 控制器下 有news【新聞】 page【單頁】 teacher【師資】 activity【活動】 student【校友】 這么多方法。
你在控制器下就起碼要有這5個方法
public function news ($catid ,$id) {}
考慮到新聞下面可能還有國內新聞和國際新聞【只是所屬欄目不同,但都是用new方法】,那麼新聞的處理方法就是
/web/news/catid/id
catid 是欄目id 用於區分 新聞種類,國內八卦新聞;國內黨政新聞;國外什麼巴拉新聞
id 就是具體的某個新聞的id。
不懂請追問,採納謝謝。
10. 網頁怎麼實現只允許顯示在iframe框架內。不允許直接訪問這個頁面。謝謝了,大神幫忙啊
在網頁的<head>裡面放入以下js代碼: if(top==self){alert("對不起,網頁必須置於Iframe內!");self.close();} (問問說我的回答不符合規則,把script標簽未貼出)
求採納