2014-03-05 128 views
0

我設計一個JAAS認證和授權application.In認證部分,由用戶輸入的用戶名和密碼對從database.There檢索的值對每個用戶三位校長匹配的是(用戶名,密碼,位置)。成功驗證後,主體將被添加到主題。此部分工作正常。訪問JAAS授權否認

問題出在授權部分(當我設置SecurityManager時),根據授予的職位(經理或員工)的權限。

策略文件是

grant codebase "/home/esamsar/NetBeansProjects/JAAS/*" 
{ 
permission javax.security.auth.AuthPermission "createLoginContext.Sample"; 
permission javax.security.auth.AuthPermission "doAsPrivileged"; 
} 


grant Principal PositionPrincipal "manager" 
{ 

    permission java.util.PropertyPermission "java.home", "read"; 
    permission java.util.PropertyPermission "user.home", "read,write"; 
    permission java.io.FilePermission "topsecurity.txt", "read"; 

}; 

grant Principal PositionPrincipal "employee" 
{ 

    permission java.util.PropertyPermission "java.home", "read"; 
    permission java.util.PropertyPermission "user.home", "read,write"; 

}; 

在添加以下代碼行我遇到「無法創建LoginContext的。拒絕訪問(」 java.util.PropertyPermission」‘java.security.auth.login.config’ 「寫」)」

System.setSecurityManager(new SecurityManager()); 
System.setProperty("java.security.auth.login.config", configFile); 
System.setProperty("java.security.policy", policyFile); 

CONFIGFILE和policyFile分別JAAS配置文件和政策文件。 我可以在策略文件中添加什麼來解決該問題。提前感謝。

+0

當我設置的系統屬性後,設置安全管理器,後來我遇到一個不同的錯誤「無法創建LoginContext.access denied(」java.util.PropertyPermission「」user.dir「」read「)」System.setProperty(「java.security.auth.login.config」,path); System.setProperty(「java.security.policy」,policy); System.setSecurityManager(新的SecurityManager()); –

+0

我已經在策略文件中授予了更多權限,現在沒有任何錯誤。我正在使用JDBC連接數據庫。我還沒有授予SQLPermission。將應用程序連接到數據庫的代碼將在沒有任何SecurityException的情況下以靜默方式跳過。 –

回答

0

你需要先寫:

System.setProperty("java.security.auth.login.config", configFile); 
System.setProperty("java.security.policy", policyFile); 

才把:

System.setSecurityManager(new SecurityManager()); 

但是,這可能不僅是問題。我有同樣的問題,我修好了。我已經在工作,但是使用了unix身份驗證。那就是: 主類:

public class UserAuthLesson { 
public static void main(String[] args) { 
    try 
    { 
     System.setProperty("java.security.policy", "src/MyApp.policy"); 
     System.setProperty("java.security.auth.login.config", "src/jaas.config"); 
     System.setSecurityManager(new SecurityManager()); 
     LoginContext context = new LoginContext("Login1"); // defined in JAAS configuration file 
     context.login(); 
     Subject subject = context.getSubject(); 
     context.logout(); 
    } 
    catch (LoginException exception) // thrown if login was not successful 
    { 
     exception.printStackTrace(); 
    } 
} 
} 

政策文件:

grant{ 
permission javax.security.auth.AuthPermission "createLoginContext.Login1"; 
permission javax.security.auth.AuthPermission "doAsPrivileged"; 
}; 
grant principal com.sun.security.auth.UnixPrincipal "max" { 
permission java.util.PropertyPermission "user.*", "read"; 
}; 

JAAS文件:

Login1 { 
com.sun.security.auth.module.UnixLoginModule required; 
};