【问题标题】:Jaas needs a Java Policy I don't know how to provide itJaas 需要一个 Java Policy 我不知道如何提供它
【发布时间】:2011-07-15 22:58:54
【问题描述】:

我正在尝试使用 Jaas、Java Authentication and 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 的启动速度。并且一直在这个环境下启动。

【问题讨论】:

    标签: java policy jaas


    【解决方案1】:

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

    【讨论】:

    • 我不明白为什么它是用户策略文件而不是项目策略文件。如何将此政策应用于我的一个项目?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 2015-02-10
      • 2021-01-22
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      相关资源
      最近更新 更多