Jaas需要Java策略我不知道如何提供它

时间:2011-03-15 16:43:00

标签: java policy jaas

我正在尝试使用Jaas,Java身份验证和Autorisation服务。 服务器是App Engine,因此不可能to edit web.xml。 我正在使用servlet过滤器,如:

@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来绕过此检查。 (但这要解决为prod)然后,在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,因为它启动了Spring上下文,这会降低App Engine启动速度。并且这个环境中的启动一直在完成。

2 个答案:

答案 0 :(得分:0)

使用$ JAVA_HOME / bin目录中的policytool授予权限。

答案 1 :(得分:0)

问题仅存在于App Engine开发模式中;一旦交付他们就没有这样的例外。

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