我正在尝试使用JAAS,Java身份验证和自动化服务。服务器是应用程序引擎,所以这是不可能的 编辑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参考。他们解释说,在有安全经理在场的情况下,有必要以这种方式授予某些权利:

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

我只是不明白为什么要在罐子里做到这一点。

我可以在运行配置中使用-d- – enable_all_permissions = true绕过此检查。 (但是,这是为了解决产品的决心),然后,在system.getProperty(“ user.home”)/。java.login.config上搜索JAAS配置文件。不是在项目资源中吗?这如何在本地 /生产中起作用?

配置文件就像:

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

非常感谢。

PS。可以与JAAS一起使用弹簧安全性,并在应用程序引擎上使用。 pps。无法使用弹簧安全性,因为它启动了春季上下文,这会减慢应用程序引擎启动。并且在此环境中的启动一直在完成。

有帮助吗?

解决方案 2

该问题仅在App Engine Dev模式下存在;一旦交付,他们就没有这样的例外。

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

其他提示

使用$ JAVA_HOME/BIN目录中的PolicyTool授予许可。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top