2011-03-15 48 views
0

我正在嘗試使用Jaas,Java身份驗證和Autorisation服務。 服務器是App Engine,因此不可能to edit web.xml。 我使用一個Servlet過濾器,如:Jaas需要Java策略我不知道如何提供它

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
    throws IOException, ServletException { 
    try { 
     LoginContext lc = new LoginContext("JaasSample", new AuthenticationCallbackHandler()); 
     lc.login(); 
     chain.doFilter(request, response); 
     lc.logout(); 
    } catch (LoginException e) { /* lc.login() fails */} 
} 

到LoginContext的調用檢查的策略,並拋出以下異常:

java.security.AccessControlException: 
access denied (javax.security.auth.AuthPermission createLoginContext.JaasSample) 

我正在使用的代碼是從Oracle reference。 他們解釋說,在安全管理的存在,有必要授予這種方式的一些權利:

grant { 
    permission javax.security.auth.AuthPermission "createLoginContext.JaasSample"; 
} 

我只是不明白爲什麼這是在一個JAR進行。

我可以在運行配置中使用-D - enable_all_permissions = true來繞過此檢查。 (但是這樣做可以解決問題)然後,在System.getProperty(「user.home」)/。java.login.config中搜索Jaas配置文件。難道不是在項目資源?這在當地/生產中如何工作?

的配置文件是這樣的:

JaasSample { 
    com.sun.security.auth.module.Krb5LoginModule required; 
}; 

非常感謝。

ps。 Spring Security可以與Jaas一起使用,並且可以在App Engine上運行。 pps。 Spring Security無法使用,因爲它會啓動減慢App Engine啓動的Spring上下文。而且這個環境中的創業始終都在進行。

回答

0

該問題僅存在於App Engine開發模式中;一旦交付他們是沒有這樣的例外。

因此,在運行配置中使用-D--enable_all_permissions=true就足夠了。

0

使用$ JAVA_HOME/bin目錄中的policytool來授予權限。

+0

我不明白爲什麼它是用戶策略文件而不是項目策略文件。我如何將這項政策應用於我的一個項目? –

相關問題