2014-03-05 4 views
0

JAAS 인증 및 권한 부여 응용 프로그램을 설계하고 있습니다. 인증 부분에서 사용자가 입력 한 사용자 이름과 비밀번호가 데이터베이스에서 검색 한 값과 일치합니다. 각 사용자마다 세 가지 원칙이 있습니다 , 암호, 위치). 인증에 성공하면 주체가 제목에 추가됩니다.이 부분은 정상적으로 작동합니다.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"; 

}; 

내가 발생할 코드의 다음 줄을 추가하면입니다 java.util.PropertyPermission에 ""java.security.auth.login.config ""(거부 LoginContext의. 액세스를 만들 수 없습니다 " "write") "

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

configFile과 policyFile은 각각 jaas 구성 파일과 정책 파일입니다. 문제를 해결하기 위해 내 정책 파일에 무엇을 추가 할 수 있습니까? 사전에 감사드립니다. 그런 다음에야

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

그리고 :

+0

나는 발생 다른 오류 "LoginContext를 만들 수 없습니다. 액세스 거부 ("java.util.PropertyPermission ""user.dir ""읽기 ")"System.setProperty ("java.security.auth.login.config", path); System.setProperty ("java.security.policy", policy); System.setSecurityManager (새 SecurityManager()); –

+0

정책 파일에 몇 가지 권한을 부여했지만 오류가 없습니다. 데이터베이스 연결에 JDBC를 사용하고 있습니다. SQLPermission을 아직 부여하지 않았습니다. 응용 프로그램을 데이터베이스에 연결하는 코드는 SecurityException없이 자동으로 건너 뜁니다. –

답변

0

은 먼저 쓰기 필요

System.setSecurityManager(new SecurityManager()); 

을하지만이뿐만 아니라 문제가 될 수있다. 나는 똑같은 문제를 겪었고 그것을 고쳤다. 나는 예제를 사용했지만 unix auth를 사용했다. 여기있다 : Main 클래스 :

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; 
}; 
관련 문제